home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / UTILITY / INTER29A.ARJ / INTERRUP.C < prev    next >
Text File  |  1992-02-09  |  293KB  |  7,813 lines

  1. Interrupt List, part 3 of 6
  2. This compilation is Copyright (c) 1989,1990,1991,1992 Ralf Brown
  3. ----------20---------------------------------
  4. INT 20 - Minix - SEND/RECEIVE MESSAGE
  5.     AX = process ID of other process
  6.     BX -> message
  7.     CX = 1 send
  8.          2 receive
  9.          3 send&receive
  10. Note:    the message contains the system call number (numbered as in V7 
  11.       Unix(tm)) and the call parameters
  12. ----------20---------------------------------
  13. INT 20 - DOS 1+ - TERMINATE PROGRAM
  14.     CS = PSP segment
  15. Return: never
  16. Note:    (see notes for INT 21/AH=00h)
  17. SeeAlso: INT 21/AH=00h,INT 21/AH=4Ch
  18. ----------2100-------------------------------
  19. INT 21 - DOS 1+ - TERMINATE PROGRAM
  20.     AH = 00h
  21.     CS = PSP segment
  22. Notes:    Microsoft recomments using INT 21/AH=4Ch for DOS 2+
  23.     execution continues at address stored in INT 22 after DOS performs
  24.       whatever cleanup it needs to do
  25.     if the PSP is its own parent, the process's memory is not freed; if
  26.       INT 22 additionally points into the terminating program, the
  27.       process is effectively NOT terminated
  28.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  29. SeeAlso: AH=26h,AH=31h,AH=4Ch,INT 20,INT 22
  30. ----------2101-------------------------------
  31. INT 21 - DOS 1+ - READ CHARACTER FROM STANDARD INPUT, WITH ECHO
  32.     AH = 01h
  33. Return: AL = character read
  34. Notes:    ^C/^Break are checked, and INT 23 executed if read
  35.     character is echoed to standard output
  36.     standard input is always the keyboard and standard output the screen
  37.       under DOS 1.x, but they may be redirected under DOS 2+
  38. SeeAlso: AH=06h,AH=07h,AH=08h,AH=0Ah
  39. ----------2102-------------------------------
  40. INT 21 - DOS 1+ - WRITE CHARACTER TO STANDARD OUTPUT
  41.     AH = 02h
  42.     DL = character to write
  43. Return: AL = last character output (despite the official docs which state
  44.         nothing is returned) (at least DOS 3.3-5.0)
  45. Notes:    ^C/^Break are checked, and INT 23 executed if pressed
  46.     standard output is always the screen under DOS 1.x, but may be
  47.       redirected under DOS 2+
  48.     the last character output will be the character in DL unless DL=09h
  49.       on entry, in which case AL=20h as tabs are expanded to blanks
  50. SeeAlso: AH=06h,AH=09h
  51. ----------2103-------------------------------
  52. INT 21 - DOS 1+ - READ CHARACTER FROM STDAUX
  53.     AH = 03h
  54. Return: AL = character read
  55. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  56.     STDAUX is usually the first serial port
  57. SeeAlso: AH=04h,INT 14/AH=02h
  58. ----------2104-------------------------------
  59. INT 21 - DOS 1+ - WRITE CHARACTER TO STDAUX
  60.     AH = 04h
  61.     DL = character to write
  62. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  63.     STDAUX is usually the first serial port
  64.     if STDAUX is busy, this function will wait until it becomes free
  65. SeeAlso: AH=03h,INT 14/AH=01h
  66. ----------2105-------------------------------
  67. INT 21 - DOS 1+ - WRITE CHARACTER TO PRINTER
  68.     AH = 05h
  69.     DL = character to print
  70. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  71.     STDPRN is usually the first parallel port, but may be redirected under
  72.       DOS 2+
  73.     if the printer is busy, this function will wait
  74. SeeAlso: INT 17/AH=00h
  75. ----------2106-------------------------------
  76. INT 21 - DOS 1+ - DIRECT CONSOLE OUTPUT
  77.     AH = 06h
  78.     DL = character (except FFh)
  79. Return: AL = character output (despite official docs which state nothing is
  80.         returned) (at least DOS 3.3-5.0)
  81. Notes:    does not check ^C/^Break
  82.     writes to standard output, which is always the screen under DOS 1.x,
  83.       but may be redirected under DOS 2+
  84. SeeAlso: AH=02h,AH=09h
  85. ----------2106--DLFF-------------------------
  86. INT 21 - DOS 1+ - DIRECT CONSOLE INPUT
  87.     AH = 06h
  88.     DL = FFh
  89. Return: ZF set if no character available
  90.     ZF clear if character available
  91.         AL = character read
  92. Notes:    ^C/^Break are NOT checked
  93.     if the returned character is 00h, the user pressed a key with an
  94.       extended keycode, which will be returned by the next call of this
  95.       function
  96.     reads from standard input, which is always the keyboard under DOS 1.x,
  97.       but may be redirected under DOS 2+
  98. SeeAlso: AH=0Bh
  99. ----------2107-------------------------------
  100. INT 21 - DOS 1+ - DIRECT CHARACTER INPUT, WITHOUT ECHO
  101.     AH = 07h
  102. Return: AL = character read from standard input
  103. Notes:    does not check ^C/^Break
  104.     standard input is always the keyboard under DOS 1.x, but may be
  105.       redirected under DOS 2+
  106.     if the interim console flag is set (see AX=6301h), partially-formed
  107.       double-byte characters may be returned
  108. SeeAlso: AH=01h,AH=06h,AH=08h,AH=0Ah
  109. ----------2108-------------------------------
  110. INT 21 - DOS 1+ - CHARACTER INPUT WITHOUT ECHO
  111.     AH = 08h
  112. Return: AL = character read from standard input
  113. Notes:    ^C/^Break are checked, and INT 23 executed if detected
  114.     standard input is always the keyboard under DOS 1.x, but may be
  115.       redirected under DOS 2+
  116.     if the interim console flag is set (see AX=6301h), partially-formed
  117.       double-byte characters may be returned
  118. SeeAlso: AH=01h,AH=06h,AH=07h,AH=0Ah,AH=64h
  119. ----------2109-------------------------------
  120. INT 21 - DOS 1+ - WRITE STRING TO STANDARD OUTPUT
  121.     AH = 09h
  122.     DS:DX -> '$'-terminated string
  123. Return: AL = 24h (the '$' terminating the string, despite official docs which
  124.         state that nothing is returned) (at least DOS 3.3-5.0)
  125. Notes:    ^C/^Break checked, and INT 23 called if pressed
  126.     standard output is always the screen under DOS 1.x, but may be
  127.       redirected under DOS 2+
  128. SeeAlso: AH=02h,AH=06h"OUTPUT"
  129. ----------210A-------------------------------
  130. INT 21 - DOS 1+ - BUFFERED INPUT
  131.     AH = 0Ah
  132.     DS:DX -> buffer (see below)
  133. Return: buffer filled with user input
  134. Notes:    ^C/^Break checked, and INT 23 called if detected
  135.     reads from standard input, which may be redirected under DOS 2+
  136.     if the maximum buffer size (see below) is set to 00h, this call returns
  137.       immediately without reading any input
  138. SeeAlso: AH=0Ch,INT 2F/AX=4810h
  139.  
  140. Format of input buffer:
  141. Offset    Size    Description
  142.  00h    BYTE    maximum characters buffer can hold
  143.  01h    BYTE    (input) number of chars from last input which may be recalled
  144.         (return) number of characters actually read, excluding CR
  145.  02h  N BYTEs    actual characters read, including the final carriage return
  146. ----------210A00-----------------------------
  147. INT 21 - WCED v1.6 - INSTALLATION CHECK
  148.     AX = 0A00h
  149.     DS:DX -> 6-byte buffer whose first two bytes must be 00h
  150. Return: buffer offset 02h-05h filled with "Wced" if installed
  151. Note:    WCED is a free command-line editor and history utility by Stuart
  152.       Russell
  153. SeeAlso: AH=FFh"CED"
  154. ----------210B-------------------------------
  155. INT 21 - DOS 1+ - GET STDIN STATUS
  156.     AH = 0Bh
  157. Return: AL = 00h if no character available
  158.        = FFh if character is available
  159. Notes:    ^C/^Break checked, and INT 23 called if pressed
  160.     standard input is always the keyboard under DOS 1.x, but may be
  161.       redirected under DOS 2+
  162.     if the interim console flag is set (see AX=6301h), this function
  163.       returns AL=FFh if a partially-formed double-byte character is
  164.       available
  165. SeeAlso: AH=06h"INPUT",AX=4406h
  166. ----------210B56-----------------------------
  167. INT 21 - VIRUS - "Perfume" - INSTALLATION CHECK
  168.     AX = 0B56h
  169. Return: AX = 4952h if resident
  170. SeeAlso: AX=0D20h
  171. ----------210C-------------------------------
  172. INT 21 - DOS 1+ - FLUSH BUFFER AND READ STANDARD INPUT
  173.     AH = 0Ch
  174.     AL = STDIN input function to execute after flushing buffer
  175.     other registers as appropriate for the input function
  176. Return: as appropriate for the specified input function
  177. Note:    if AL is not one of 01h,06h,07h,08h, or 0Ah, the buffer is flushed but
  178.       no input is attempted
  179. SeeAlso: AH=01h,AH=06h"INPUT",AH=07h,AH=08h,AH=0Ah
  180. ----------210D-------------------------------
  181. INT 21 - DOS 1+ - DISK RESET
  182.     AH = 0Dh
  183. Notes:    writes all modified disk buffers to disk, but does not update directory
  184.       information (that is only done when files are closed or a SYNC call
  185.       is issued)
  186. SeeAlso: AX=5D01h,INT 13/AH=00h,INT 2F/AX=1120h
  187. ----------210D20-----------------------------
  188. INT 21 - VIRUS - "Crazy Imp" - INSTALLATION CHECK
  189.     AX = 0D20h
  190. Return: AX = 1971h if resident
  191. SeeAlso: AX=0B56h,AH=30h/DX=ABCDh
  192. ----------210E-------------------------------
  193. INT 21 - DOS 1+ - SELECT DEFAULT DRIVE
  194.     AH = 0Eh
  195.     DL = new default drive (00h = A:, 01h = B:, etc)
  196. Return: AL = number of potentially valid drive letters
  197. Notes:    under Novell NetWare, the return value is always 32, the number of
  198.       drives that NetWare supports
  199.     under DOS 3+, the return value is the greatest of 5, the value of
  200.       LASTDRIVE= in CONFIG.SYS, and the number of drives actually present
  201.     on a DOS 1.x/2.x single-floppy system, AL returns 2 since the floppy
  202.       may be accessed as either A: or B:
  203.     otherwise, the return value is the highest drive actually present
  204.     DOS 1.x supports a maximum of 16 drives, 2.x a maximum of 63 drives,
  205.       and 3+ a maximum of 26 drives
  206. SeeAlso: AH=19h,AH=3Bh,AH=DBh
  207. ----------210F-------------------------------
  208. INT 21 - DOS 1+ - OPEN FILE USING FCB
  209.     AH = 0Fh
  210.     DS:DX -> unopened File Control Block (see below)
  211. Return: AL = status
  212.         00h successful
  213.         FFh file not found or access denied
  214. Notes:    (DOS 3.1+) file opened for read/write in compatibility mode
  215.     an unopened FCB has the drive, filename, and extension fields filled
  216.       in and all other bytes cleared
  217.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  218. SeeAlso: AH=10h,AH=16h,AH=3Dh
  219.  
  220. Format of File Control Block:
  221. Offset    Size    Description
  222.  -7    BYTE    extended FCB if FFh
  223.  -6   5 BYTEs    reserved
  224.  -1    BYTE    file attribute if extended FCB
  225.  00h    BYTE    drive number (0 = default, 1 = A, etc)
  226.  01h  8 BYTEs    blank-padded file name 
  227.  09h  3 BYTEs    blank-padded file extension
  228.  0Ch    WORD    current block number
  229.  0Eh    WORD    logical record size
  230.  10h    DWORD    file size
  231.  14h    WORD    date of last write (see AX=5700h)
  232.  16h    WORD    time of last write (see AX=5700h) (DOS 1.1+)
  233.  18h  8 BYTEs    reserved (see below)
  234.  20h    BYTE    record within current block
  235.  21h    DWORD    random access record number (if record size is > 64 bytes, high
  236.         byte is omitted)
  237. Note:    to use an extended FCB, you must specify the address of the FFh flag at
  238.       offset -7, rather than the address of the drive number field
  239.  
  240. Format of reserved field for DOS 1.0:
  241. Offset    Size    Description
  242.  16h    WORD    location in directory (if high byte = FFh, low byte is device
  243.         ID)
  244.  18h    WORD    number of first cluster in file
  245.  1Ah    WORD    last cluster number accessed (absolute)
  246.  1Ch    WORD    relative current cluster number
  247.  1Eh    BYTE    dirty flag (00h = not dirty)
  248.  1Fh    BYTE    unused
  249.  
  250. Format of reserved field for DOS 1.10-1.25:
  251. Offset    Size    Description
  252.  18h    BYTE    bit 7: set if logical device
  253.         bit 6: not dirty
  254.         bits 5-0: disk number or logical device ID
  255.  19h    WORD    starting cluster number
  256.  1Bh    WORD    absolute current cluster number
  257.  1Dh    WORD    relative current cluster number
  258.  1Fh    BYTE    unused
  259.  
  260. Format of reserved field for DOS 2.x:
  261. Offset    Size    Description
  262.  18h    BYTE    bit 7: set if logical device
  263.         bit 6: set if open???
  264.         bits 5-0: ???
  265.  19h    WORD    starting cluster number
  266.  1Bh    WORD    ???
  267.  1Dh    BYTE    ???
  268.  1Eh    BYTE    ???
  269.  1Fh    BYTE    ???
  270.  
  271. Format of reserved field for DOS 3.x:
  272. Offset    Size    Description
  273.  18h    BYTE    number of system file table entry for file
  274.  19h    BYTE    attributes
  275.         bits 7,6: 00 = SHARE.EXE not loaded, disk file
  276.               01 = SHARE.EXE not loaded, character device
  277.               10 = SHARE.EXE loaded, remote file
  278.               11 = SHARE.EXE loaded, local file
  279.         bits 5-0: low six bits of device attribute word
  280. ---SHARE.EXE loaded, local file---
  281.  1Ah    WORD    starting cluster of file
  282.  1Ch    WORD    offset within SHARE of sharing record (see AH=52h)
  283.  1Eh    BYTE    file attribute
  284.  1Fh    BYTE    ???
  285. ---SHARE.EXE loaded, remote file---
  286.  1Ah    WORD    number of sector containing directory entry
  287.  1Ch    WORD    relative cluster within file of last cluster accessed
  288.  1Eh    BYTE    absolute cluster number of last cluster accessed
  289.  1Fh    BYTE    ???
  290. ---SHARE.EXE not loaded---
  291.  1Ah    BYTE    (low byte of device attribute word AND 0Ch) OR open mode
  292.  1Bh    WORD    starting cluster of file
  293.  1Dh    WORD    number of sector containing directory entry
  294.  1Fh    BYTE    number of directory entry within sector
  295. Note:    if FCB opened on character device, DWORD at 1Ah is set to the address
  296.       of the device driver header, then the BYTE at 1Ah is overwritten.
  297. ----------2110-------------------------------
  298. INT 21 - DOS 1+ - CLOSE FILE USING FCB
  299.     AH = 10h
  300.     DS:DX -> File Control Block (see AH=0Fh)
  301. Return: AL = status
  302.         00h successful
  303.         FFh failed
  304. Notes:    a successful close forces all disk buffers used by the file to be
  305.       written and the directory entry to be updated
  306.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  307. SeeAlso: AH=0Fh,AH=16h,AH=3Eh
  308. ----------2111-------------------------------
  309. INT 21 - DOS 1+ - FIND FIRST MATCHING FILE USING FCB
  310.     AH = 11h
  311.     DS:DX -> unopened FCB (see AH=0Fh), may contain '?' wildcards
  312. Return: AL = status
  313.         00h successful
  314.         [DTA] unopened FCB for first matching file
  315.         FFh no matching filename, or bad FCB
  316. Notes:    the type of the returned FCB depends on whether the input FCB was a
  317.       normal or an extended FCB
  318.     for extended FCBs with search attribute 08h, the volume label (if any)
  319.       will be returned even if the current directory is not the root dir.
  320.     DOS 3+ also allows the '*' wildcard
  321.     the search FCB must not be modified if AH=12h will be used to continue
  322.       searching; DOS 3.3 has set the following parts of the FCB:
  323.          0Ch    BYTE    ???
  324.          0Dh    WORD    directory entry number of matching file
  325.          0Fh    WORD    cluster number of current directory
  326.          11h  4 BYTEs    ???
  327.          15h    BYTE    drive number (1=A:)
  328.     at least for DOS 3.3, the unopened FCB in the DTA is actually the drive
  329.       number followed by the file's directory entry
  330. SeeAlso: AH=12h,AH=1Ah,AH=4Eh,INT 2F/AX=111Bh
  331. ----------2112-------------------------------
  332. INT 21 - DOS 1+ - FIND NEXT MATCHING FILE USING FCB
  333.     AH = 12h
  334.     DS:DX -> unopened FCB (see AH=0Fh)
  335. Return: AL = status
  336.         00h successful
  337.         [DTA] = unopened FCB
  338.         FFh no more matching filenames
  339. Note:    (see AH=11h)
  340.     assumes that successful FindFirst executed on search FCB before call
  341. SeeAlso: AH=1Ah,AH=4Fh,INT 2F/AX=111Ch
  342. ----------2113-------------------------------
  343. INT 21 - DOS 1+ - DELETE FILE USING FCB
  344.     AH = 13h
  345.     DS:DX -> unopened FCB (see AH=0Fh), filename filled with template for
  346.         deletion ('?' wildcards allowed)
  347. Return: AL = status
  348.         00h one or more files successfully deleted
  349.         FFh no matching files or all were read-only or locked
  350. Notes:    DOS 1.25+ deletes everything in the current directory (including
  351.       subdirectories) and sets the first byte of the name to 00h (entry
  352.       never used) instead of E5h if called on an extended FCB with
  353.       filename '???????????' and bits 0-4 of the attribute set (bits 1 and
  354.       2 for DOS 1.x).  This may have originally been an optimization to
  355.       minimize directory searching after a mass deletion (DOS 1.25+ stop
  356.       the directory search upon encountering a never-used entry), but can
  357.       corrupt the filesystem under DOS 2+ because subdirectories are
  358.       removed without deleting the files they contain.
  359.     currently-open files should not be deleted
  360. SeeAlso: AH=41h,INT 2F/AX=1113h
  361. ----------2114-------------------------------
  362. INT 21 - DOS 1+ - SEQUENTIAL READ FROM FCB FILE
  363.     AH = 14h
  364.     DS:DX -> opened FCB (see AH=0Fh)
  365. Return: AL = status
  366.         00h successful
  367.         01h end of file (no data)
  368.         02h segment wrap in DTA
  369.         03h end of file, partial record read
  370.     [DTA] = record read from file
  371. Notes:    reads a record of the size specified in the FCB beginning at the
  372.       current file position, then updates the current block and current
  373.       record fields in the FCB
  374.     if a partial record was read, it is zero-padded to the full size
  375.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  376. SeeAlso: AH=0Fh,AH=15h,AH=1Ah,AH=3Fh,INT 2F/AX=1108h
  377. ----------2115-------------------------------
  378. INT 21 - DOS 1+ - SEQUENTIAL WRITE TO FCB FILE
  379.     AH = 15h
  380.     DS:DX -> opened FCB (see AH=0Fh)
  381.     [DTA] = record to write
  382. Return: AL = status
  383.         00h successful
  384.         01h disk full
  385.         02h segment wrap in DTA
  386. Notes:    writes a record of the size specified in the FCB beginning at the
  387.       current file position, then updates the current block and current
  388.       record fields in the FCB
  389.     if less than a full sector is written, the data is placed in a DOS
  390.       buffer to be written out at a later time
  391.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  392. SeeAlso: AH=0Fh,AH=14h,AH=1Ah,AH=40h,INT 2F/AX=1109h
  393. ----------2116-------------------------------
  394. INT 21 - DOS 1+ - CREATE OR TRUNCATE FILE USING FCB
  395.     AH = 16h
  396.     DS:DX -> unopened FCB (see AH=0Fh), wildcards not allowed
  397. Return: AL = status
  398.         00h successful
  399.         FFh directory full or file exists and is read-only or locked
  400. Notes:    if file already exists, it is truncated to zero length
  401.     if an extended FCB is used, the file is given the attribute in the
  402.       FCB
  403.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  404. SeeAlso: AH=0Fh,AH=10h,AH=3Ch
  405. ----------2117-------------------------------
  406. INT 21 - DOS 1+ - RENAME FILE USING FCB
  407.     AH = 17h
  408.     DS:DX -> modified FCB (see also AH=0Fh)
  409.         the old filename ('?' wildcards OK) is in the standard location
  410.         while the new filename ('?' wildcards OK) is stored in the 11
  411.         bytes beginning at offset 11h
  412. Return:    AL = status
  413.         00h successfully renamed
  414.         FFh no matching files,file is read-only, or new name already exists
  415. Note:    subdirectories may be renamed using an extended FCB with the
  416.       appropriate attribute
  417. SeeAlso: AH=0Fh,AH=13h,AH=56h,INT 2F/AX=1111h
  418. ----------2118-------------------------------
  419. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  420.     AH = 18h
  421. Return: AL = 00h
  422. Note:    corresponds to the CP/M BDOS function "get bit map of logged drives",
  423.       which is meaningless under MSDOS
  424. SeeAlso: AH=1Dh,AH=1Eh,AH=20h,AX=4459h
  425. ----------2119-------------------------------
  426. INT 21 - DOS 1+ - GET CURRENT DEFAULT DRIVE
  427.     AH = 19h
  428. Return: AL = drive (00h = A:, 01h = B:, etc)
  429. SeeAlo: AH=0Eh,AH=47h
  430. ----------211A-------------------------------
  431. INT 21 - DOS 1+ - SET DISK TRANSFER AREA ADDRESS
  432.     AH = 1Ah
  433.     DS:DX -> Disk Transfer Area (DTA)
  434. Note:    the DTA is set to PSP:0080h when a program is started
  435. SeeAlso: AH=11h,AH=12h,AH=2Fh,AH=4Eh,AH=4Fh
  436. ----------211B-------------------------------
  437. INT 21 - DOS 1+ - GET ALLOCATION INFORMATION FOR DEFAULT DRIVE
  438.     AH = 1Bh
  439. Return: AL = sectors per cluster (allocation unit)
  440.     CX = bytes per sector
  441.     DX = total number of clusters
  442.     DS:BX -> media ID byte (see below)
  443. Note:    under DOS 1.x, DS:BX points at an actual copy of the FAT; later
  444.       versions return a pointer to a copy of the FAT's ID byte
  445. SeeAlso: AH=1Ch,AH=36h
  446.  
  447. Values for media ID byte:
  448.  FFh    floppy, double-sided, 8 sectors per track (320K)
  449.  FEh    floppy, single-sided, 8 sectors per track (160K)
  450.  FDh    floppy, double-sided, 9 sectors per track (360K)
  451.  FCh    floppy, single-sided, 9 sectors per track (180K)
  452.  F9h    floppy, double-sided, 15 sectors per track (1.2M)
  453.  F8h    hard disk
  454.  F0h    other
  455. ----------211C-------------------------------
  456. INT 21 - DOS 1+ - GET ALLOCATION INFORMATION FOR SPECIFIC DRIVE
  457.     AH = 1Ch
  458.     DL = drive (00h = default, 01h = A:, etc)
  459. Return: AL = sectors per cluster (allocation unit)
  460.     CX = bytes per sector
  461.     DX = total number of clusters
  462.     DS:BX -> media ID byte (see AH=1Bh)
  463. Note:    under DOS 1.x, DS:BX points at an actual copy of the FAT; later
  464.       versions return a pointer to a copy of the FAT's ID byte
  465. SeeAlso: AH=1Bh,AH=36h
  466. ----------211D-------------------------------
  467. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  468.     AH = 1Dh
  469. Return: AL = 00h
  470. Note:    corresponds to the CP/M BDOS function "get bit map of read-only
  471.       drives", which is meaningless under MSDOS
  472. SeeAlso: AH=18h,AH=1Eh,AH=20h,AX=4459h
  473. ----------211E-------------------------------
  474. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  475.     AH = 1Eh
  476. Return: AL = 00h
  477. Note:    corresponds to a CP/M BDOS function which is meaningless under MSDOS
  478. SeeAlso: AH=18h,AH=1Dh,AH=20h
  479. ----------211F-------------------------------
  480. INT 21 - DOS 1+ - GET DRIVE PARAMETER BLOCK FOR DEFAULT DRIVE
  481.     AH = 1Fh
  482. Return: AL = status
  483.         00h successful
  484.         DS:BX -> Drive Parameter Block (DPB) (see below for DOS 1.x,
  485.             AH=32h for DOS 2+)
  486.         FFh invalid drive
  487. Note:    documented for DOS 5.0, but undocumented in prior versions
  488. SeeAlso: AH=32h
  489.  
  490. Format of DOS 1.1 and MSDOS 1.25 drive parameter block:
  491. Offset    Size    Description
  492.  00h    BYTE    sequential device ID
  493.  01h    BYTE    logical drive number (0=A:)
  494.  02h    WORD    bytes per sector
  495.  04h    BYTE    highest sector number within a cluster
  496.  05h    BYTE    shift count to convert clusters into sectors
  497.  06h    WORD    starting sector number of first FAT
  498.  08h    BYTE    number of copies of FAT
  499.  09h    WORD    number of directory entries
  500.  0Bh    WORD    number of first data sector
  501.  0Dh    WORD    highest cluster number (number of data clusters + 1)
  502.  0Fh    BYTE    sectors per FAT
  503.  10h    WORD    starting sector of directory
  504.  12h    WORD    address of allocation table
  505. Note:    the DOS 1.0 table is the same except that the first and last fields
  506.       are missing
  507. ----------2120-------------------------------
  508. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  509.     AH = 20h
  510. Return: AL = 00h
  511. Note:    corresponds to the CP/M BDOS function "get/set default user number",
  512.       which is meaningless under MSDOS
  513. SeeAlso: AH=18h,AH=1Dh,AH=1Eh,AX=4459h
  514. ----------2121-------------------------------
  515. INT 21 - DOS 1+ - READ RANDOM RECORD FROM FCB FILE
  516.     AH = 21h
  517.     DS:DX -> opened FCB (see AH=0Fh)
  518. Return: AL = status
  519.         00h successful    
  520.         01h end of file, no data read
  521.         02h segment wrap in DTA, no data read
  522.         03h end of file, partial record read
  523.     [DTA] = record read from file
  524. Notes:    the record is read from the current file position as specified by the
  525.       random record and record size fields of the FCB
  526.     the file position is not updated after reading the record
  527.     if a partial record is read, it is zero-padded to the full size
  528.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  529. SeeAlso: AH=14h,AH=22h,AH=27h,AH=3Fh
  530. ----------2122-------------------------------
  531. INT 21 - DOS 1+ - WRITE RANDOM RECORD TO FCB FILE
  532.     AH = 22h
  533.     DS:DX -> opened FCB (see AH=0Fh)
  534.     [DTA] = record to write
  535. Return: AL = status
  536.         00h successful
  537.         01h disk full
  538.         02h segment wrap in DTA
  539. Notes:    the record is written to the current file position as specified by the
  540.       random record and record size fields of the FCB
  541.     the file position is not updated after writing the record
  542.     if the record is located beyond the end of the file, the file is
  543.       extended but the intervening data remains uninitialized
  544.     if the record only partially fills a disk sector, it is copied to a
  545.       DOS disk buffer to be written out to disk at a later time
  546.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  547. SeeAlso: AH=15h,AH=21h,AH=28h,AH=40h
  548. ----------2123-------------------------------
  549. INT 21 - DOS 1+ - GET FILE SIZE FOR FCB
  550.     AH = 23h
  551.     DS:DX -> unopened FCB (see AH=0Fh), wildcards not allowed
  552. Return: AL = status
  553.         00h successful (matching file found)
  554.         FCB random record field filled with size in records, rounded up
  555.         to next full record
  556.         FFh failed (no matching file found)
  557. Note:    not supported by MS Windows 3.0 DOSX.EXE DOS extender
  558. SeeAlso: AH=42h
  559. ----------2124-------------------------------
  560. INT 21 - DOS 1+ - SET RANDOM RECORD NUMBER FOR FCB
  561.     AH = 24h
  562.     DS:DX -> opened FCB (see AH=0Fh)
  563. Notes:    computes the random record number corresponding to the current record
  564.       number and record size, then stores the result in the FCB
  565.     normally used when switching from sequential to random access
  566.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  567. SeeAlso: AH=21h,AH=27h,AH=42h
  568. ----------2125-------------------------------
  569. INT 21 - DOS 1+ - SET INTERRUPT VECTOR
  570.     AH = 25h
  571.     AL = interrupt number
  572.     DS:DX -> new interrupt handler
  573. Note:    this function is preferred over direct modification of the interrupt
  574.       vector table
  575. SeeAlso: AH=35h
  576. ----------212501-----------------------------
  577. INT 21 - Phar Lap 386/DOS-Extender - RESET 386/DOS-EXTENDER DATA STRUCTURES 
  578.     AX = 2501h
  579. Return: CF clear
  580. Note:    Phar Lap uses INT 21/AH=25h as the entry point for all 386/DOS-Extender
  581.       system calls.     Only available when directly using 386/DOS-Extender,
  582.       or when using a product that was created using 386-DOS/Extender
  583. ----------212502-----------------------------
  584. INT 21 - Phar Lap 386/DOS-Extender - GET PROTECTED-MODE INTERRUPT VECTOR
  585.     AX = 2502h
  586.     CL = interrupt number
  587. Return: ES:EBX -> 48-bit address of protected-mode interrupt handler
  588.     CF clear
  589. SeeAlso: AX=2503h,AX=2504h,INT 31/AX=0204h
  590. ----------212503-----------------------------
  591. INT 21 - Phar Lap 386/DOS-Extender - GET REAL-MODE INTERRUPT VECTOR
  592.     AX = 2503h
  593.     CL = interrupt number
  594. Return: EBX = 32-bit address of real-mode interrupt handler
  595.     CF clear
  596. SeeAlso: AX=2502h,AX=2504h,INT 31/AX=0200h
  597. ----------212504-----------------------------
  598. INT 21 - Phar Lap 386/DOS-Extender - SET PROTECTED-MODE INTERRUPT VECTOR
  599.     AX = 2504h
  600.     CL = interrupt number
  601.     DS:EDX -> 48-bit address of protected-mode interrupt handler
  602. Return: CF clear
  603. SeeAlso: AX=2502h,AX=2505h,INT 31/AX=0205h
  604. ----------212505-----------------------------
  605. INT 21 - Phar Lap 386/DOS-Extender - SET REAL-MODE INTERRUPT VECTOR
  606.     AX = 2505h
  607.     CL = interrupt number
  608.     EBX = 32-bit address of real-mode interrupt handler
  609. Return: CF clear
  610. SeeAlso: AX=2503h,AX=2504h,INT 31/AX=0201h
  611. ----------212506-----------------------------
  612. INT 21 - Phar Lap 386/DOS-Extender - SET INT TO ALWAYS GAIN CONTRL IN PROT MODE
  613.     AX = 2506h
  614.     CL = interrupt number
  615.     DS:EDX -> 48-bit address of protected-mode interrupt handler
  616. Return: CF clear
  617. Note:    This function modifies both the real-mode low-memory interrupt
  618.       vector table and the protected-mode Interrupt Descriptor Table (IDT)
  619.     Interrupts occurring in real mode are resignaled in protected mode.
  620. ----------212507-----------------------------
  621. INT 21 - Phar Lap 386/DOS-Extender - SET REAL- & PROTECTED-MODE INT VECTORS
  622.     AX = 2507h
  623.     CL = interrupt number
  624.     DS:EDX -> 48-bit address of protected-mode interrupt handler
  625.     EBX = 32-bit address of real-mode interrupt handler
  626. Return: CF clear
  627. Note:    interrupts are disabled until both vectors have been modified
  628. SeeAlso: AX=2504h,AX=2505h
  629. ----------212508-----------------------------
  630. INT 21 - Phar Lap 386/DOS-Extender - GET SEGMENT LINEAR BASE ADDRESS
  631.     AX = 2508h
  632.     BX = segment selector
  633. Return: CF clear if successful
  634.         ECX = linear base address of segment
  635.     CF set if invalid segment selector
  636. ----------212509-----------------------------
  637. INT 21 - Phar Lap 386/DOS-Extender - CONVERT LINEAR TO PHYSICAL ADDRESS
  638.     AX = 2509h
  639.     EBX = linear address to convert
  640. Return: CF clear if successful
  641.         ECX = physical address (carry flag clear)
  642.     CF set if linear address not mapped in page tables
  643. ----------21250A-----------------------------
  644. INT 21 - Phar Lap 386/DOS-Extender - MAP PHYSICAL MEMORY AT END OF SEGMENT
  645.     AX = 250Ah
  646.     ES = segment selector in the Local Descriptor Table (LDT) of segment
  647.          to modify
  648.     EBX = physical base address of memory to map (multiple of 4K)
  649.     ECX = number of physical 4K pages to map
  650. Return: CF clear if successful
  651.         EAX = 32-bit offset in segment of mapped memory
  652.     CF set on error
  653.         EAX = error code
  654.         08h insufficient memory to create page tables
  655.         09h invalid segment selector
  656. SeeAlso: INT 31/AX=0800h
  657. ----------21250C-----------------------------
  658. INT 21 - Phar Lap 386/DOS-Extender - GET HARDWARE INTERRUPT VECTORS
  659.     AX = 250Ch
  660. Return: CF clear
  661.     AL = base interrupt vector for IRQ0-IRQ7
  662.     AH = base interrupt vector for IRQ8-IRQ15
  663.     BL = interrupt vector for BIOS print screen function
  664. SeeAlso: INT 31/AX=0400h
  665. ----------21250D-----------------------------
  666. INT 21 - Phar Lap 386/DOS-Extender - GET REAL-MODE LINK INFORMATION
  667.     AX = 250Dh
  668. Return: CF clear
  669.     EAX = 32-bit address of real-mode 386/DOS-Extender proc that will call
  670.           through from real mode to a protected-mode routine
  671.     EBX = 32-bit real-mode address of intermode call data buffer
  672.     ECX = size in bytes of intermode call data buffer
  673.     ES:EDX -> protected-mode address of intermode call data buffer
  674. ----------21250E-----------------------------
  675. INT 21 - Phar Lap 386/DOS-Extender - CALL REAL-MODE PROCEDURE
  676.     AX = 250Eh
  677.     EBX = 32-bit address of real-mode procedure to call
  678.     ECX = number of two-byte words to copy from protected-mode stack
  679.           to real-mode stack
  680. Return: CF clear if successful
  681.         all segment registers unchanged
  682.         all general registers contain values set by real-mode procedure
  683.         all other flags set as they were left by real-mode procedure
  684.     CF set on error
  685.         EAX = error code
  686.         01h not enough real-mode stack space
  687. SeeAlso: AH=E1h"OS/286",INT 31/AX=0301h
  688. ----------21250F-----------------------------
  689. INT 21 - Phar Lap 386/DOS-Extender - CONVERT PROTECTED-MODE ADDRESS TO MS-DOS
  690.     AX = 250Fh
  691.     ES:EBX -> 48-bit protected-mode address to convert
  692.     ECX = length of data, in bytes
  693. Return: CF clear if successful
  694.         ECX = 32-bit MS-DOS address
  695.     CF set on error
  696.         ECX destroyed
  697. SeeAlso: AX=2510h
  698. ----------212510-----------------------------
  699. INT 21 - Phar Lap 386/DOS-Extender - CALL REAL-MODE PROCEDURE, REGISTERS
  700.     AX = 2510h
  701.     EBX = 32-bit address of real-mode procedure to call
  702.     ECX = number of two-byte words to copy to protected-mode stack to
  703.           real-mode stack
  704.     DS:EDX -> pointer to parameter block (see below)
  705. Return: CF clear if successful
  706.         all segment registers unchanged,
  707.         EDX unchanged
  708.         all other general registers contain values set by real-mode proc
  709.         all other flags are set as they were left by real-mode procedure
  710.         real-mode register values are returned in the parameter block
  711.     CF set on error
  712.         EAX = error code
  713.         01h not enough real-mode stack space
  714. SeeAlso: AX=250Fh
  715.  
  716. Format of parameter block:
  717. Offset    Size    Description
  718.  00h    WORD    real-mode DS value
  719.  02h    WORD    real-mode ES value
  720.  04h    WORD    real-mode FS value
  721.  06h    WORD    real-mode GS value
  722.  08h    DWORD    real-mode EAX value
  723.  0Ch    DWORD    real-mode EBX value
  724.  10h    DWORD    real-mode ECX value
  725.  14h    DWORD    real-mode EDX value
  726. ----------212511-----------------------------
  727. INT 21 - Phar Lap 386/DOS-Extender - ISSUE REAL-MODE INTERRUPT
  728.     AX = 2511h
  729.     DS:EDX -> pointer to parameter block (see below)
  730. Return: all segment registers unchanged
  731.     EDX unchanged
  732.     all other registers contain values set by the real-mode int handler
  733.     the flags are set as they were left by the real-mode interrupt handler
  734.     real-mode register values are returned in the parameter block
  735. SeeAlso: AX=2503h,AX=2505h,AH=E3h"OS/286",INT 31/AX=0300h
  736.  
  737. Format of parameter block:
  738. Offset    Size    Description
  739.  00h    WORD    interrupt number
  740.  02h    WORD    real-mode DS value
  741.  04h    WORD    real-mode ES value
  742.  06h    WORD    real-mode FS value
  743.  08h    WORD    real-mode GS value
  744.  0Ah    DWORD    real-mode EAX value
  745.  0Eh    DWORD    real-mode EDX value
  746. Note: all other real-mode values set from protected-mode registers
  747. ----------212512-----------------------------
  748. INT 21 - Phar Lap 386/DOS-Extender - LOAD PROGRAM FOR DEBUGGING
  749.     AX = 2512h
  750.     DS:EDX -> pointer to ASCIIZ program name
  751.     ES:EBX -> pointer to parameter block (see below)
  752.     ECX = size in bytes of LDT buffer
  753. Return: CF clear if successful
  754.         EAX = number of segment descriptors in LDT
  755.     CF set on error
  756.         EAX = error code
  757.         02h file not found or path invalid
  758.         05h access denied
  759.         08h insufficient memory
  760.         0Ah environment invalid
  761.         0Bh invalid file format
  762.         80h LDT too small
  763.  
  764. Format of parameter block:
  765. Offset    Size    Description
  766. Input:
  767.  00h    DWORD    32-bit offset of environment string
  768.  04h    WORD    segment of environment string
  769.  06h    DWORD    32-bit offset of command-tail string
  770.  0Ah    WORD    segment of command-tail string
  771.  0Ch    DWORD    32-bit offset of LDT buffer (size in ECX)
  772.  10h    WORD    segment of LDT buffer
  773. Output:
  774.  12h    WORD    real-mode paragraph address of PSP (see also AH=26h)
  775.  14h    WORD    real/protected mode flag
  776.         0000h  real mode
  777.         0001h  protected mode
  778.  16h    DWORD    initial EIP value
  779.  1Ah    WORD    initial CS value
  780.  1Ch    DWORD    initial ESP value
  781.  20h    WORD    initial SS value
  782.  22h    WORD    initial DS value
  783.  24h    WORD    initial ES value
  784.  26h    WORD    initial FS value
  785.  28h    WORD    initial GS value
  786. ----------212513-----------------------------
  787. INT 21 - Phar Lap 386/DOS-Extender - ALIAS SEGMENT DESCRIPTOR
  788.     AX = 2513h
  789.     BX = segment selector of descriptor in GDT or LDT
  790.     CL = access-rights byte for alias descriptor
  791.     CH = use-type bit (USE16 or USE32) for alias descriptor
  792. Return: CF clear if successful
  793.         AX = segment selector for created alias
  794.     CF set on error
  795.         EAX = error code
  796.         08h insufficient memory (can't grow LDT)
  797.         09h invalid segment selector in BX
  798. ----------212514-----------------------------
  799. INT 21 - Phar Lap 386/DOS-Extender - CHANGE SEGMENT ATTRIBUTES
  800.     AX = 2514h
  801.     BX = segment selector of descriptor in GDT or LDT
  802.     CL = new access-rights byte 
  803.     CH = new use-type bit (USE16 or USE32)
  804. Return: CF clear if successful
  805.     CF set on error
  806.         EAX = error code
  807.         09h invalid selector in BX
  808. SeeAlso: AX=2515h,INT 31/AX=0009h
  809. ----------212515-----------------------------
  810. INT 21 - Phar Lap 386/DOS-Extender - GET SEGMENT ATTRIBUTES
  811.     AX = 2515h
  812.     BX = segment selector of descriptor in GDT or LDT
  813. Return: CF clear if successful
  814.         CL = access-rights byte for segment
  815.         CH = use-type bit (USE16 or USE32)
  816.     ECX<16-31> destroyed
  817.     CF set on error
  818.         EAX = error code
  819.         09h invalid segment selector in BX
  820. SeeAlso: AX=2514h
  821. ----------212516-----------------------------
  822. INT 21 - Phar Lap 386/DOS-Extender - FREE ALL MEMORY OWNED BY LDT
  823.     AX = 2516h
  824.     ???
  825. Return: ???
  826. ----------212517-----------------------------
  827. INT 21 - Phar Lap 386/DOS-Extender - GET INFO ON DOS DATA BUFFER
  828.     AX = 2517h
  829.     ???
  830. Return: ???
  831. ----------212518-----------------------------
  832. INT 21 - Phar Lap 386/DOS-Extender - SPECIFY HANDLER FOR MOVED SEGMENTS
  833.     AX = 2518h
  834.     ???
  835. Return: ???
  836. ----------212519-----------------------------
  837. INT 21 - Phar Lap 386/DOS-Extender VMM - GET ADDITIONAL MEMORY ERROR INFO
  838.     AX = 2519h
  839. Return: CF clear
  840.     EAX = error code
  841.         0000h  no error
  842.         0001h  out of physical memory
  843.         0002h  out of swap space (unable to grow swap file)
  844.         0003h  out of LDT entries and unable to grow LDT
  845.         0004h  unable to change extended memory allocation mark
  846.         FFFFFFFFh    paging disabled
  847. Note:    VMM is the Virtual Memory Manager option
  848. ----------21251A-----------------------------
  849. INT 21 - Phar Lap 386/DOS-Extender VMM - LOCK PAGES IN MEMORY
  850.     AX = 251Ah
  851.     EDX = number of 4k pages to lock
  852.     if BL = 00h
  853.         ECX = linear address of first page to lock
  854.     if BL = 01h
  855.         ES:ECX -> pointer to first page to lock
  856. Return: CF clear if successful
  857.     CF set on error
  858.         EAX = error code
  859.         08h insufficient memory
  860.         09h invalid address range
  861. SeeAlso: AX=251Bh,AX=EB06h,INT 31/AX=0600h
  862. ----------21251B-----------------------------
  863. INT 21 - Phar Lap 386/DOS-Extender VMM - UNLOCK PAGES
  864.     AX = 251Bh
  865.     EDX = number of pages to unlock
  866.     if BL = 00h
  867.         ECX = linear address of first page to unlock
  868.     if BL = 01h
  869.         ES:ECX -> pointer to first page to unlock
  870. Return: CF clear if successful
  871.     CF set on error
  872.         EAX = error code
  873.         09h invalid address range
  874. SeeAlso: AX=251Ah,AX=EB07h,INT 31/AX=0601h
  875. ----------21251D-----------------------------
  876. INT 21 - Phar Lap 386/DOS-Extender VMM - READ PAGE-TABLE ENTRY
  877.     AX = 251Dh
  878.     ???
  879. Return: ???
  880. SeeAlso: AX=251Eh,AX=EB00h,INT 31/AX=0506h
  881. ----------21251E-----------------------------
  882. INT 21 - Phar Lap 386/DOS-Extender VMM - WRITE PAGE-TABLE ENTRY
  883.     AX = 251Eh
  884.     ???
  885. Return: ???
  886. SeeAlso: AX=251Dh,INT 31/AX=0507h
  887. ----------21251F-----------------------------
  888. INT 21 - Phar Lap 386/DOS-Extender VMM - EXHANGE TWO PAGE-TABLE ENTRIES
  889.     AX = 251Fh
  890.     ???
  891. Return: ???
  892. SeeAlso: AX=251Dh,AX=251Eh
  893. ----------212520-----------------------------
  894. INT 21 - Phar Lap 386/DOS-Extender VMM - GET MEMORY STATISTICS
  895.     AX = 2520h
  896.     DS:EDX -> pointer to buffer at least 100 bytes in size (see below)
  897.     BL = 0 (don't reset VM stats), 1 (reset VM stats)
  898. Return: carry flag clear    
  899.  
  900. Format of VM stats buffer:
  901. Offset    Size    Description
  902.  00h    DWORD    VM status
  903.         0001h VM subsystem is present
  904.         0000h VM not present
  905.  04h    DWORD    "nconvpg" number of conventional memory pages available
  906.  08h    DWORD    "nbimpg" number of Compaq built-in memory pages available
  907.  0Ch    DWORD    "nextpg" total number of extended memory pages
  908.  10h    DWORD    "extlim" extender memory pages limit
  909.  14h    DWORD    "aphyspg" number of physical memory pages allocated to appl
  910.  18h    DWORD    "alockpg" number of locked pages owned by application
  911.  1Ch    DWORD    "sysphyspg" number physical memory pages allocated to system
  912.  20h    DWORD    "nfreepg" number of free physical pages; approx if EMS VCPI
  913.  24h    DWORD    linear address of beginning of application address space
  914.  28h    DWORD    linear address of end of application address space
  915.  2Ch    DWORD    number of seconds since last time VM stats were reset
  916.  30h    DWORD    number of page faults since last time
  917.  34h    DWORD    number of pages written to swap file since last time
  918.  38h    DWORD    number of reclaimed pages (page faults on swapped pages)
  919.  3Ch    DWORD    number of virtual pages allocated to the application
  920.  40h    DWORD    size in pages of swap file
  921.  44h    DWORD    number of system pages allocated with EMS calls
  922.  48h    DWORD    minimum number of conventional memory pages
  923.  4Ch    DWORD    maximum size in bytes to which swap file can be increased
  924.  50h    DWORD    "vmflags" bit 0 = 1 if page fault in progress
  925.  54h 16 BYTEs    reserved for future expansion (set to zero)
  926. ----------212521-----------------------------
  927. INT 21 - Phar Lap 386/DOS-Extender VMM - LIMIT PROGRAM'S EXTENDED MEMORY USAGE
  928.     AX = 2521h
  929.     EBX = max 4k pages of physical extended memory which program may use
  930. Return: CF clear if successful
  931.        EBX = maximum limit in pages
  932.        ECX = minimum limit in pages
  933.     CF set on error
  934.         EAX = error code
  935.         08h insufficient memory or -nopage switch used
  936. SeeAlso: AX=2522h
  937. ----------212522-----------------------------
  938. INT 21 - Phar Lap 386/DOS-Extender VMM - SPECIFY ALTERNATE PAGE-FAULT HANDLER
  939.     AX = 2522h
  940.     ???
  941. Return: ???
  942. SeeAlso: AX=2523h
  943. ----------212523-----------------------------
  944. INT 21 - Phar Lap 386/DOS-Extender VMM - SPECIFY OUT-OF-SWAP-SPACE HANDLER
  945.     AX = 2523h
  946.     ???
  947. Return: ???
  948. SeeAlso: AX=2522h
  949. ----------212524-----------------------------
  950. INT 21 - Phar Lap 386/DOS-Extender VMM - INSTALL PAGE-REPLACEMENT HANDLERS
  951.     AX = 2524h
  952.     ???
  953. Return: ???
  954. ----------212525-----------------------------
  955. INT 21 - Phar Lap 386/DOS-Extender VMM - LIMIT PROGRAM'S CONVENTIONAL MEM USAGE
  956.     AX = 2525h
  957.     EBX = limit in 4k pages of physical conventional memory which program 
  958.           may use
  959. Return: CF clear if successful
  960.         EBX = maximum limit in pages
  961.         ECX = minimum limit in pages
  962.     CF set on error
  963.         EAX = error code
  964.         08h insufficient memory or -nopage switch used
  965. SeeAlso: AX=2521h
  966. ----------212526-----------------------------
  967. INT 21 - Phar Lap 386/DOS-Extender - GET CONFIGURATION INFORMATION
  968.     AX = 2526h
  969.     ???
  970. Return: ???
  971. ----------2125C0-----------------------------
  972. INT 21 - Phar Lap 386/DOS-Extender - ALLOCATE MS-DOS MEMORY BLOCK
  973.     AX = 25C0h
  974.     BX = number of 16-byte paragraphs of MS-DOS memory requested
  975. Return: CF clear if successful
  976.         AX = real-mode paragraph address of memory
  977.     CF set on error
  978.         AX = error code
  979.         07h MS-DOS memory control blocks destroyed
  980.         08h insufficient memory
  981.         BX = size in paragraphs of largest available memory block
  982. SeeAlso: AX=25C1h,AX=25C2h
  983. ----------2125C1-----------------------------
  984. INT 21 - Phar Lap 386/DOS-Extender - RELEASE MS-DOS MEMORY BLOCK
  985.     AX = 25C1h
  986.     CX = real-mode paragraph address of memory block to free
  987. Return: CF clear if successful
  988.         EAX destroyed
  989.     CF set on error
  990.         AX = error code
  991.         07h MS-DOS memory control blocks destroyed
  992.         09h invalid memory block address in CX
  993. SeeAlso: AX=25C0h,AX=25C2h
  994. ----------2125C2-----------------------------
  995. INT 21 - Phar Lap 386/DOS-Extender - MODIFY MS-DOS MEMORY BLOCK
  996.     AX = 25C2h
  997.     BX = new requested block size in paragraphs
  998.     CX = real-mode paragraph address of memory block to modify
  999. Return: CF clear if successful
  1000.         EAX destroyed
  1001.     CF set on error
  1002.         AX = error code
  1003.         07h MS-DOS memory control blocks destroyed
  1004.         08h insufficient memory
  1005.         09h invalid memory block address in CX
  1006.         BX = size in paragraphs of largest available memory block
  1007. SeeAlso: AX=25C0h,AX=25C1h
  1008. ----------2125C3-----------------------------
  1009. INT 21 - Phar Lap 386/DOS-Extender - EXECUTE PROGRAM
  1010.     AX = 25C3h
  1011.     ES:EBX -> pointer to parameter block (see below)
  1012.     DS:EDX -> pointer to ASCIIZ program filename
  1013. Return: CF clear if successful
  1014.         all registers unchanged
  1015.     CF set on error
  1016.         EAX = error code
  1017.         01h function code in AL is invalid ???
  1018.         02h file not found or path invalid
  1019.         05h access denied
  1020.         08h insufficient memory to load program
  1021.         0Ah environment invalid
  1022.         0Bh invalid file format
  1023.  
  1024. Format of parameter block:
  1025. Offset    Size    Description
  1026.  00h    DWORD    32-bit offset of environment string
  1027.  04h    WORD    segment selector of environment string
  1028.  06h    DWORD    32-bit offset of command-tail string
  1029.  0Ah    WORD    segment selector of command-tail string
  1030. ----------2126-------------------------------
  1031. INT 21 - DOS 1+ - CREATE NEW PROGRAM SEGMENT PREFIX
  1032.     AH = 26h
  1033.     DX = segment at which to create PSP (see below for format)
  1034. Notes:    new PSP is updated with memory size information; INTs 22h, 23h, 24h
  1035.       taken from interrupt vector table
  1036.     (DOS 2+) DOS assumes that the caller's CS is the segment of the PSP to
  1037.       copy
  1038. SeeAlso: AH=4Bh,AH=50h,AH=51h,AH=55h,AH=62h,AH=67h
  1039.  
  1040. Format of PSP:
  1041. Offset    Size    Description
  1042.  00h  2 BYTEs    INT 20 instruction for CP/M CALL 0 program termination
  1043.  02h    WORD    segment of first byte beyond memory allocated to program
  1044.  04h    BYTE    unused filler
  1045.  05h    BYTE    CP/M CALL 5 service request (FAR JMP to 000C0h)
  1046.         BUG: (DOS 2+) PSPs created by INT 21/AH=4Bh point at 000BEh
  1047.  06h    WORD    CP/M compatibility--size of first segment for .COM files
  1048.  08h  2 BYTEs    remainder of FAR JMP at 05h
  1049.  0Ah    DWORD    stored INT 22 termination address
  1050.  0Eh    DWORD    stored INT 23 control-Break handler address
  1051.  12h    DWORD    DOS 1.1+ stored INT 24 critical error handler address
  1052.  16h    WORD    segment of parent PSP
  1053.  18h 20 BYTEs    DOS 2+ Job File Table, one byte per file handle, FFh = closed
  1054.  2Ch    WORD    DOS 2+ segment of environment for process
  1055.  2Eh    DWORD    DOS 2+ process's SS:SP on entry to last INT 21 call
  1056.  32h    WORD    DOS 3+ number of entries in JFT (default 20)
  1057.  34h    DWORD    DOS 3+ pointer to JFT (default PSP:0018h)
  1058.  38h    DWORD    DOS 3+ pointer to previous PSP (default FFFFFFFFh in 3.x)
  1059.         used by SHARE in DOS 3.3
  1060.  3Ch  4 BYTEs    unused by DOS versions <= 5.00
  1061.  40h  2 BYTEs    DOS 5.0 version to return on INT 21/AH=30h
  1062.  42h 14 BYTEs    unused by DOS versions <= 5.00
  1063.  50h  3 BYTEs    DOS 2+ service request (INT 21/RETF instructions)
  1064.  53h  9 BYTEs    unused in DOS versions <= 5.00
  1065.  5Ch 16 BYTEs    first default FCB, filled in from first commandline argument
  1066.         overwrites second FCB if opened
  1067.  6Ch 16 BYTEs    second default FCB, filled in from second commandline argument
  1068.         overwrites beginning of commandline if opened
  1069.  7Ch  4 BYTEs    unused
  1070.  80h 128 BYTEs    commandline / default DTA
  1071.         command tail is BYTE for length of tail, N BYTEs for the tail,
  1072.         followed by a BYTE containing 0Dh
  1073. Notes:    in DOS versions 3.0 and up, the limit on simultaneously open files may
  1074.       be increased by allocating memory for a new open file table, filling
  1075.       it with FFh, copying the first 20 bytes from the default table, and
  1076.       adjusting the pointer and count at 34h and 32h.  However, DOS
  1077.       versions through  at least 3.30 will only copy the first 20 file
  1078.       handles into a child PSP (including the one created on EXEC).
  1079.     network redirectors based on the original MS-Net implementation use
  1080.       values of 80h-FEh in the open file table to indicate remote files
  1081.     MSDOS 5.00 incorrectly fills the FCB fields when loading a program
  1082.       high; the first FCB is empty and the second contains the first
  1083.       parameter
  1084.  
  1085. Format of environment block:
  1086. Offset    Size    Description
  1087.  00h  N BYTEs    first environment variable, ASCIZ string of form "var=value"
  1088.       N BYTEs    second environment variable, ASCIZ string
  1089.     ...
  1090.       N BYTEs    last environment variable, ASCIZ string of form "var=value"
  1091.     BYTE    00h
  1092. ---DOS 3+---
  1093.     WORD    number of strings following environment (normally 1)
  1094.       N BYTEs    ASCIZ full pathname of program owning this environment
  1095.         other strings may follow
  1096. ----------2127-------------------------------
  1097. INT 21 - DOS 1+ - RANDOM BLOCK READ FROM FCB FILE
  1098.     AH = 27h
  1099.     CX = number of records to read
  1100.     DS:DX -> opened FCB (see AH=0Fh)
  1101. Return: AL = status
  1102.         00h successful, all records read
  1103.         01h end of file, no data read
  1104.         02h segment wrap in DTA, no data read
  1105.         03h end of file, partial read
  1106.     [DTA] = records read from file
  1107.     CX = number of records read (return AL = 00h or 03h)
  1108. Notes:    read begins at current file position as specified in FCB; the file
  1109.       position is updated after reading
  1110.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  1111. SeeAlso: AH=21h,AH=28h,AH=3Fh
  1112. ----------2128-------------------------------
  1113. INT 21 - DOS 1+ - RANDOM BLOCK WRITE TO FCB FILE
  1114.     AH = 28h
  1115.     CX = number of records to write
  1116.     DS:DX -> opened FCB (see AH=0Fh)
  1117.     [DTA] = records to write
  1118. Return: AL = status
  1119.         00h successful
  1120.         01h disk full or file read-only
  1121.         02h segment wrap in DTA
  1122.     CX = number of records written
  1123. Notes:    write begins at current file position as specified in FCB; the file
  1124.       position is updated after writing
  1125.     if CX = 0000h on entry, no data is written; instead the file size is
  1126.       adjusted to be the same as the file position specified by the random
  1127.       record and record size fields of the FCB
  1128.     if the data to be written is less than a disk sector, it is copied into
  1129.       a DOS disk buffer, to be written out to disk at a later time
  1130.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  1131. SeeAlso: AH=22h,AH=27h,AH=40h,AH=59h
  1132. ----------2129-------------------------------
  1133. INT 21 - DOS 1+ - PARSE FILENAME INTO FCB
  1134.     AH = 29h
  1135.     AL = parsing options
  1136.         bit 0: skip leading separators
  1137.         bit 1: use existing drive number in FCB if no drive is specified,
  1138.            instead of setting field to zero
  1139.         bit 2: use existing filename in FCB if no base name is specified,
  1140.            instead of filling field with blanks
  1141.         bit 3: use existing extension in FCB if no extension is specified,
  1142.            instead of filling field with blanks
  1143.         bits 4-7: reserved (0)
  1144.     DS:SI -> filename string (both '*' and '?' wildcards OK)
  1145.     ES:DI -> buffer for unopened FCB
  1146. Return: AL = result code
  1147.         00h successful parse, no wildcards encountered
  1148.         01h successful parse, wildcards present
  1149.         FFh failed (invalid drive specifier)
  1150.     DS:SI -> first unparsed character
  1151.     ES:DI buffer filled with unopened FCB (see AH=0Fh)
  1152. Notes:    asterisks expanded to question marks in the FCB
  1153.     all processing stops when a filename terminator is encountered
  1154.     cannot be used with filespecs which include a path (DOS 2+)
  1155. SeeAlso: AH=0Fh,AH=16h,AH=26h
  1156. ----------212A-------------------------------
  1157. INT 21 - DOS 1+ - GET SYSTEM DATE
  1158.     AH = 2Ah
  1159. Return: CX = year (1980-2099)
  1160.     DH = month
  1161.     DL = day
  1162. ---DOS 1.10+---
  1163.     AL = day of week (00h=Sunday)
  1164. SeeAlso: AH=2Bh"DOS",AH=2Ch,AH=E7h,INT 1A/AH=04h
  1165. ----------212B-------------------------------
  1166. INT 21 - DOS 1+ - SET SYSTEM DATE
  1167.     AH = 2Bh
  1168.     CX = year (1980-2099)
  1169.     DH = month
  1170.     DL = day
  1171. Return: AL = status
  1172.         00h successful
  1173.         FFh invalid date, system date unchanged
  1174. Note:    DOS 3.3+ also sets CMOS clock
  1175. SeeAlso: AH=2Ah,AH=2Dh,INT 1A/AH=05h
  1176. ----------212B--CX4358-----------------------
  1177. INT 21 - PC Tools v5.x PC-Cache - INSTALLATION CHECK
  1178.     AH = 2Bh
  1179.     CX = 4358h ('CX')
  1180. Return: AL = FFh if PC-Cache not installed
  1181.     AL = 00h if installed
  1182.         CX = 6378h ('cx')
  1183.         BX = ???
  1184.         DX = ???
  1185. SeeAlso: INT 16/AX=FFA5h/CX=1111h
  1186. ----------212B--CX4445-----------------------
  1187. INT 21 - DESQview - INSTALLATION CHECK
  1188.     AH = 2Bh
  1189.     CX = 4445h ('DE')
  1190.     DX = 5351h ('SQ')
  1191.     AL = subfunction (DV v2.00+)
  1192.         01h get version
  1193.         Return: BX = version (BH = major, BL = minor)
  1194.         Note: early copies of v2.00 return 0002h
  1195.         02h get shadow buffer info, and start shadowing
  1196.         Return: BH = rows in shadow buffer
  1197.             BL = columns in shadow buffer
  1198.             DX = segment of shadow buffer
  1199.         04h get shadow buffer info
  1200.         Return: BH = rows in shadow buffer
  1201.             BL = columns in shadow buffer
  1202.             DX = segment of shadow buffer
  1203.         05h stop shadowing
  1204. Return: AL = FFh if DESQview not installed
  1205. Note:    in DESQview v1.x, there were no subfunctions; this call only identified
  1206.     whether or not DESQview was loaded
  1207. SeeAlso: INT 10/AH=FEh,INT 10/AH=FFh,INT 15/AX=1024h
  1208. ----------212B--CX454C-----------------------
  1209. INT 21 - ELRES v1.1 - INSTALLATION CHECK
  1210.     AH = 2Bh
  1211.     CX = 454Ch ('EL')
  1212.     DX = 5253h ('RS')
  1213. Return: ES:BX -> ELRES history structure (see below)
  1214.     DX = DABEh (signature, DAve BEnnett)
  1215. Note:    ELRES is an MSDOS return code (errorlevel) recorder by David H. Bennett
  1216.       which stores recent errorlevel values, allows them to be retrieved
  1217.       for use in batch files, and can place them in an environment variable
  1218. SeeAlso: AH=4Bh"ELRES",AH=4Dh
  1219.  
  1220. Format of ELRES history structure:
  1221. Offset    Size    Description
  1222.  00h    WORD    number of return codes which can be stored by following buffer
  1223.  02h    WORD    current position in buffer (treated as a ring)
  1224.  04h  N BYTEs    ELRES buffer
  1225. ----------212B01CX5441-----------------------
  1226. INT 21 - TAME v2.10+ - INSTALLATION CHECK
  1227.     AX = 2B01h
  1228.     CX = 5441h ('TA')
  1229.     DX = 4D45h ('ME')
  1230. ---v2.60---
  1231.     BH = ???
  1232.         00h skip ???, else do
  1233. Return: AL = 02h if installed
  1234.     ES:DX -> data area in TAME-RES (see below)
  1235. Note:    TAME is a shareware program by David G. Thomas which gives up CPU time
  1236.       to other partitions under a multitasker when the current partition's
  1237.       program incessantly polls the keyboard or system time
  1238.  
  1239. Format of TAME 2.10-2.20 data area:
  1240. Offset    Size    Description
  1241.  00h    BYTE    data structure minor version number (01h in TAME 2.20)
  1242.  01h    BYTE    data structure major version number (07h in TAME 2.20)
  1243.  02h    DWORD    number of task switches
  1244.  06h    DWORD    number of keyboard polls
  1245.  0Ah    DWORD    number of time polls
  1246.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  1247.  12h    DWORD    original INT 10h
  1248.  16h    DWORD    original INT 14h
  1249.  1Ah    DWORD    original INT 15h
  1250.  1Eh    DWORD    original INT 16h
  1251.  22h    DWORD    original INT 17h
  1252.  26h    DWORD    original INT 21h
  1253.  2Ah    DWORD    original INT 28h
  1254.  2Eh    WORD    offset of TAME INT 10h handler
  1255.  30h    WORD    offset of TAME INT 14h handler
  1256.  32h    WORD    offset of TAME INT 15h handler
  1257.  34h    WORD    offset of TAME INT 16h handler
  1258.  36h    WORD    offset of TAME INT 17h handler
  1259.  38h    WORD    offset of TAME INT 21h handler
  1260.  3Ah    WORD    offset of TAME INT 28h handler
  1261.  3Ch    WORD    X in /max:X,Y or /freq:X,Y
  1262.  3Eh    WORD    Y in /max:X,Y or /freq:X,Y
  1263.  40h    WORD    number of polls remaining before next task switch
  1264.  42h    WORD    /KEYIDLE value
  1265.  44h    BYTE    flags for interrupts already grabbed by TAME
  1266.         bit 0: INT 10h
  1267.             1: INT 14h
  1268.             2: INT 15h
  1269.             3: INT 16h
  1270.             4: INT 17h
  1271.             5: INT 21h
  1272.             6: INT 28h
  1273.  45h    BYTE    flags for interrupts which may be acted on (same bits as above)
  1274.  46h    BYTE    TAME enabled (01h) or disabled (00h)
  1275.  47h    BYTE    /TIMEPOLL (01h) or /NOTIMEPOLL (00h)
  1276.  48h    BYTE    /NOTIMER (01h) or /TIMER (00h)
  1277.  49h    BYTE    window or task number for this task
  1278.  4Ah    BYTE    multitasker type ???
  1279.         01h DESQview
  1280.         02h DoubleDOS
  1281.         03h TopView
  1282.         ???
  1283.  4Bh    BYTE    type of task switching selected
  1284.         bit 0: DESQview???
  1285.             1: DoubleDOS???
  1286.             2: TopView???
  1287.             3: KeySwitch
  1288.             4: HLT instruction
  1289.  4Ch    BYTE    ???
  1290.  4Dh    BYTE    flags
  1291.         bit 1: /FREQ instead of /MAX
  1292.  4Eh    BYTE    /FG: value
  1293.  4Fh    BYTE    task switches left until next FGONLY DESQview API call
  1294.  50h    BYTE    ???
  1295.  
  1296. Format of TAME 2.30 data area:
  1297. Offset    Size    Description
  1298.  00h    BYTE    data structure minor version number (02h in TAME 2.30)
  1299.  01h    BYTE    data structure major version number (0Ah in TAME 2.30)
  1300.  02h    DWORD    number of task switches
  1301.  06h    DWORD    number of keyboard polls
  1302.  0Ah    DWORD    number of time polls
  1303.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  1304.  12h    DWORD    time of last /CLEAR or TAME-RES load
  1305.  16h    DWORD    time yielded
  1306.  1Ah    DWORD    time spent polling
  1307.  1Eh    DWORD    time spent waiting on key input with INT 16/AH=01h,11h
  1308.  22h    DWORD    original INT 10h
  1309.  26h    DWORD    original INT 14h
  1310.  2Ah    DWORD    original INT 15h
  1311.  2Eh    DWORD    original INT 16h
  1312.  32h    DWORD    original INT 17h
  1313.  36h    DWORD    original INT 21h
  1314.  3Ah    DWORD    original INT 28h
  1315.  3Eh    WORD    offset of TAME INT 10h handler
  1316.  40h    WORD    offset of TAME INT 14h handler
  1317.  42h    WORD    offset of TAME INT 15h handler
  1318.  44h    WORD    offset of TAME INT 16h handler
  1319.  46h    WORD    offset of TAME INT 17h handler
  1320.  48h    WORD    offset of TAME INT 21h handler
  1321.  4Ah    WORD    offset of TAME INT 28h handler
  1322.  4Ch    WORD    X in /max:X,Y or /freq:X,Y
  1323.  4Eh    WORD    Y in /max:X,Y or /freq:X,Y
  1324.  50h    WORD    number of polls remaining before next task switch
  1325.  52h    WORD    /KEYIDLE value
  1326.  54h    WORD    /FG: value
  1327.  56h    WORD    task switches left until next FGONLY DESQview API call
  1328.  58h    WORD    multitasker version
  1329.  5Ah    WORD    virtual screen segment
  1330.  5Ch    BYTE    flags for interrupts already grabbed by TAME
  1331.         bit 0: INT 10h
  1332.             1: INT 14h
  1333.             2: INT 15h
  1334.             3: INT 16h
  1335.             4: INT 17h
  1336.             5: INT 21h
  1337.             6: INT 28h
  1338.  5Dh    BYTE    flags for interrupts which may be acted on (same bits as above)
  1339.  5Eh    BYTE    window or task number for this task
  1340.  5Fh    BYTE    multitasker type
  1341.         01h DESQview
  1342.         02h DoubleDOS
  1343.         03h TopView
  1344.         04h OmniView
  1345.         05h VM/386
  1346.  60h    BYTE    type of task switching selected (bit flags)
  1347.         bit 0: DESQview
  1348.             1: DoubleDOS
  1349.             2: TopView
  1350.             3: OmniView
  1351.             4: KeySwitch
  1352.             5: HLT instruction
  1353.  61h    BYTE    watch_DOS
  1354.  62h    BYTE    bit flags
  1355.         bit 0: TAME enabled
  1356.             1: /FREQ instead of /MAX (counts in 3Ch and 3Eh per tick)
  1357.             2: /TIMEPOLL
  1358.             3: /KEYPOLL
  1359.             4: inhibit timer
  1360.             5: enable status monitoring
  1361.  63h    BYTE    old status
  1362.  64h    WORD    signature DA34h
  1363.  
  1364. Format of TAME 2.60 data area:
  1365. Offset    Size    Description
  1366.  00h    BYTE    data structure minor version number (02h in TAME 2.60)
  1367.  01h    BYTE    data structure major version number (0Bh in TAME 2.60)
  1368.  02h    DWORD    number of task switches
  1369.  06h    DWORD    number of keyboard polls
  1370.  0Ah    DWORD    number of time polls
  1371.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  1372.  12h    DWORD    time of last /CLEAR or TAME-RES load
  1373.  16h    DWORD    time yielded
  1374.  1Ah    DWORD    time spent polling
  1375.  1Eh    DWORD    time spent waiting on key input with INT 16/AH=01h,11h
  1376.  22h  4 BYTEs    ???
  1377.  26h    DWORD    original INT 10h
  1378.  2Ah    DWORD    original INT 14h
  1379.  2Eh    DWORD    original INT 15h
  1380.  32h    DWORD    original INT 16h
  1381.  36h    DWORD    original INT 17h
  1382.  3Ah    DWORD    original INT 21h
  1383.  3Eh    DWORD    original INT 28h
  1384.  42h    WORD    offset of TAME INT 10h handler
  1385.  44h    WORD    offset of TAME INT 14h handler
  1386.  46h    WORD    offset of TAME INT 15h handler
  1387.  48h    WORD    offset of TAME INT 16h handler
  1388.  4Ah    WORD    offset of TAME INT 17h handler
  1389.  4Ch    WORD    offset of TAME INT 21h handler
  1390.  4Eh    WORD    offset of TAME INT 28h handler
  1391.  50h    WORD    X in /max:X,Y or /freq:X,Y
  1392.  52h    WORD    Y in /max:X,Y or /freq:X,Y
  1393.  54h    WORD    number of polls remaining before next task switch
  1394.  56h    WORD    /KEYIDLE value
  1395.  58h  4 BYTEs    ???
  1396.  5Ch    WORD    X in /boost:X,Y
  1397.  5Eh    WORD    Y in /boost:X,Y
  1398.  60h    WORD    /FG: value
  1399.  62h    WORD    task switches left until next FGONLY DESQview API call
  1400.  64h    WORD    multitasker version ???
  1401.  66h    WORD    virtual screen segment
  1402.  68h    BYTE    flags for interrupts already grabbed by TAME
  1403.         bit 0: INT 10h
  1404.             1: INT 14h
  1405.             2: INT 15h
  1406.             3: INT 16h
  1407.             4: INT 17h
  1408.             5: INT 21h
  1409.             6: INT 28h
  1410.  69h    BYTE    flags for interrupts which may be acted on (same bits as above)
  1411.  6Ah    BYTE    window or task number for this task
  1412.  6Bh    BYTE    multitasker type
  1413.         01h DESQview
  1414.         02h DoubleDOS
  1415.         03h TopView
  1416.         04h OmniView
  1417.         05h VM/386
  1418.  6Ch    BYTE    type of task switching selected (bit flags)
  1419.         bit 0: DESQview
  1420.             1: DoubleDOS
  1421.             2: TopView
  1422.             3: OmniView
  1423.             4: KeySwitch
  1424.             5: HLT instruction
  1425.  6Dh    BYTE    watch_DOS
  1426.  6Eh    BYTE    bit flags
  1427.         bit 0: TAME enabled
  1428.             1: /FREQ instead of /MAX (counts in 50h and 52h per tick)
  1429.             2: /TIMEPOLL
  1430.             3: /KEYPOLL
  1431.             4: inhibit timer
  1432.             5: enable status monitoring
  1433.  6Fh    BYTE    old status
  1434.  70h    WORD    signature DA34h
  1435. ----------212B44BX4D41-----------------------
  1436. INT 21 - pcANYWHERE IV/LAN - INSTALLATION CHECK
  1437.     AX = 2B44h ('D')
  1438.     BX = 4D41h ('MA')
  1439.     CX = 7063h ('pc')
  1440.     DX = 4157h ('AW')
  1441. Return: AX = 4F4Bh ('OK') if large host resident
  1442.        = 6F6Bh ('ok') if small host resident
  1443.     CX:DX -> API entry point
  1444. SeeAlso: INT 16/AH=79h
  1445.  
  1446. Call API entry point with:
  1447.     AX = 0000h get pcANYWHERE IV version
  1448.         DS:SI -> BYTE buffer for host type code
  1449.         Return: AH = version number
  1450.             AL = revision number
  1451.             DS:DI buffer byte filled with
  1452.             00h full-featured host
  1453.             01h limited-feature LAN host
  1454.             other API may not be supported
  1455.     AX = 0001h initialize operation
  1456.         DS:SI -> initialization request structure (see below)
  1457.         Return: AX = function status (see below)
  1458.     AX = 0002h get status
  1459.         Return: AH = current operating mode (see init req structure below)
  1460.             AL = current connection status
  1461.             bit 0: a physical connection is active
  1462.             bit 1: remove screen updating is active
  1463.             bit 2: connection checking is active
  1464.             bit 3: hot key detection is active
  1465.             bit 4: background file transfer is active
  1466.     AX = 0003h suspend remote screen updates
  1467.         Return: AX = function status (see below)
  1468.     AX = 0004h resume screen updates
  1469.         Return: AX = function status (see below)
  1470.     AX = 0005h end current remote access session
  1471.         DS:SI -> termination request structure (see below)
  1472.         Return: AX = function status (see below)
  1473.     AX = 0006h remove pcANYWHERE IV from memory
  1474.         Return: AX = status
  1475.             0000h successful
  1476.             FFD2h unable to release allocated memory
  1477.             FFD1h unable to release interrupt vectors
  1478.     AX = 8000h read data from communications channel
  1479.         DS:BX -> buffer
  1480.         CX = buffer size
  1481.         Return: AX >= number of characters read/available
  1482.             AX < 0 on error
  1483.     AX = 8001h write data to communications channel
  1484.         DS:BX -> buffer
  1485.         CX = buffer size
  1486.         Return: AX >= number of characters written
  1487.             AX < 0 on error
  1488.     AX = 8002h get connection status
  1489.         Return: AX = status
  1490.             > 0000h if connection active
  1491.             = 0000h if connection lost
  1492.             < 0000h on error
  1493.  
  1494. Format of initialization request structure:
  1495. Offset    Size    Description
  1496.  00h    BYTE    operating mode
  1497.         00h wait for a call
  1498.         01h hot key activates
  1499.         02h incoming call activates
  1500.         03h initiate a call
  1501.  01h  3 BYTEs    user ID to append to config file names
  1502.  04h    WORD    DS-relative pointer to path for config files
  1503.  06h    WORD    DS-relative pointer to path for program files
  1504.  
  1505. Format of termination request structure:
  1506. Offset    Size    Description
  1507.  00h    BYTE    operating mode after termination
  1508.         00h wait for a call
  1509.         01h hot key activates
  1510.         02h incoming call activates
  1511.         80h use current mode
  1512.         FFh remove from memory
  1513.  
  1514. Values for function status:
  1515.  0000h function completed successfully
  1516.  FFF2h unable to establish a connection when operating mode is
  1517.     "Initiate a call"
  1518.  FFF3h modem configuration is invalid (corrupt config)
  1519.  FFF4h modem initialization failed (no modem response)
  1520.  FFF5h the communications device could not be initialized
  1521.  FFF6h the host operator aborted the function
  1522.  FFF7h the communications driver type specified in the configuration file is
  1523.     different than the one loaded when pcANYWHERE IV was initially started
  1524.  FFF9h the configuration file is invalid
  1525.  FFFAh the configuration file could not be found
  1526.  FFFBh no session is active
  1527.  FFFCh a remote access session is active
  1528.  FFFDh the specified operating mode is invalid
  1529. ----------212C-------------------------------
  1530. INT 21 - DOS 1+ - GET SYSTEM TIME
  1531.     AH = 2Ch
  1532. Return: CH = hour
  1533.     CL = minute
  1534.     DH = second
  1535.     DL = 1/100 seconds
  1536. Note:    on most systems, the resolution of the system clock is about 5/100sec,
  1537.       so returned times generally do not increment by 1
  1538.     on some systems, DL may always return 00h
  1539. SeeAlso: AH=2Ah,AH=2Dh,AH=E7h,INT 1A/AH=00h,INT 1A/AH=02h,INT 1A/AH=FEh
  1540. ----------212D-------------------------------
  1541. INT 21 - DOS 1+ - SET SYSTEM TIME
  1542.     AH = 2Dh
  1543.     CH = hour
  1544.     CL = minute
  1545.     DH = second
  1546.     DL = 1/100 seconds
  1547. Return: AL = result
  1548.         00h successful
  1549.         FFh invalid time, system time unchanged
  1550. Note:    DOS 3.3+ also sets CMOS clock
  1551. SeeAlso: AH=2Bh"DOS",AH=2Ch,INT 1A/AH=01h,INT 1A/AH=03h,INT 1A/AH=FFh"AT&T"
  1552. ----------212E--DL00-------------------------
  1553. INT 21 - DOS 1+ - SET VERIFY FLAG
  1554.     AH = 2Eh
  1555.     DL = 00h (DOS 1.x/2.x only)
  1556.     AL = new state of verify flag
  1557.         00h off
  1558.         01h on
  1559. Notes:    default state at system boot is OFF
  1560.     when ON, all disk writes are verified provided the device driver
  1561.       supports read-after-write verification
  1562. SeeAlso: AH=54h
  1563. ----------212F-------------------------------
  1564. INT 21 - DOS 2+ - GET DISK TRANSFER AREA ADDRESS
  1565.     AH = 2Fh
  1566. Return: ES:BX -> current DTA
  1567. SeeAlso: AH=1Ah
  1568. ----------2130-------------------------------
  1569. INT 21 - DOS 2+ - GET DOS VERSION
  1570.     AH = 30h
  1571. ---DOS 5.0---
  1572.     AL = what to return in BH
  1573.         00h OEM number (as for DOS 2.0-4.0x)
  1574.         01h version flag
  1575. Return: AL = major version number (00h if DOS 1.x)
  1576.     AH = minor version number
  1577.     BL:CX = 24-bit user serial number (most versions do not use this)
  1578. ---if DOS <5 or AL=00h---
  1579.     BH = OEM number
  1580.         00h IBM
  1581.         05h Zenith
  1582.         16h DEC
  1583.         23h Olivetti
  1584.         29h Toshiba
  1585.         4Dh    Hewlett-Packard
  1586.         99h    STARLITE architecture (OEM DOS, NETWORK DOS, SMP DOS)
  1587.         FFh Microsoft, Phoenix
  1588. ---if DOS 5.0 and AL=01h---
  1589.     BH = version flag
  1590.         08h DOS is in ROM
  1591.         10h DOS is in HMA
  1592. Notes:    the OS/2 v1.x Compatibility Box returns major version 0Ah
  1593.     the OS/2 v2.x Compatibility Box returns major version 14h
  1594.     DOS 4.01 and 4.02 identify themselves as version 4.00
  1595.     generic MSDOS 3.30, Compaq MSDOS 3.31, and others identify themselves
  1596.       as PC-DOS by returning OEM number 00h
  1597.     the version returned under DOS 4.0x may be modified by entries in
  1598.       the special program list (see AH=52h)
  1599.     the version returned under DOS 5.0 may be modified by SETVER; use
  1600.       AX=3306h to get the true version number
  1601. SeeAlso: AX=3306h,INT 2F/AX=122Fh
  1602. ----------2130-------------------------------
  1603. INT 21 - Phar Lap 386/DOS-Extender - GET VERSION
  1604.     AH = 30h
  1605.     EBX = 50484152h ("PHAR")
  1606. Return: ???
  1607. ----------2130--DXABCD-----------------------
  1608. INT 21 - VIRUS - "Possessed" - INSTALLATION CHECK
  1609.     AH = 30h
  1610.     DX = ABCDh
  1611. Return: DX = DCBAh if installed
  1612. SeeAlso: AX=0D20h,AX=30F1h
  1613. ----------213000BX1234-----------------------
  1614. INT 21 - CTask 2.0+ - INSTALLATION CHECK
  1615.     AX = 3000h
  1616.     BX = 1234h
  1617.     DS:DX -> 8-byte version string (DX < FFF0h) "CTask21",00h for v2.1-2.2
  1618. Return: AL = DOS major version
  1619.     AH = DOS minor version
  1620.     CX:BX -> Ctask global data block
  1621. Notes:    if first eight bytes of returned data block equal eight bytes passed
  1622.       in, CTask is resident
  1623.     CTask is a multitasking kernel for C written by Thomas Wagner
  1624. ----------2130F1-----------------------------
  1625. INT 21 - VIRUS - "Dutch-555"/"Quit 1992" - INSTALLATION CHECK
  1626.     AX = 30F1h
  1627. Return: AL = 00h if resident
  1628. SeeAlso: AH=30h/DX=ABCDh,AX=330Fh
  1629. ----------2131-------------------------------
  1630. INT 21 - DOS 2+ - TERMINATE AND STAY RESIDENT
  1631.     AH = 31h
  1632.     AL = return code
  1633.     DX = number of paragraphs to keep resident
  1634. Return: never
  1635. Notes:    the value in DX only affects the memory block containing the PSP;
  1636.       additional memory allocated via AH=48h is not affected
  1637.     the minimum number of paragraphs which will remain resident is 11h
  1638.       for DOS 2.x and 06h for DOS 3+
  1639.     most TSRs can save some memory by releasing their environment block
  1640.       before terminating (see AH=26h,AH=49h)
  1641. SeeAlso: AH=00h,AH=4Ch,AH=4Dh,INT 20,INT 22,INT 27
  1642. ----------2132-------------------------------
  1643. INT 21 - DOS 2+ - GET DOS DRIVE PARAMETER BLOCK FOR SPECIFIC DRIVE
  1644.     AH = 32h
  1645.     DL = drive number (00h = default, 01h = A:, etc)
  1646. Return: AL = status
  1647.         00h successful
  1648.         DS:BX -> Drive Parameter Block (DPB) for specified drive
  1649.         FFh invalid or network drive
  1650. Notes:    the OS/2 compatibility box supports the DOS 3.3 version of this call
  1651.       except for the DWORD at offset 12h
  1652.     this call updates the DPB by reading the disk; the DPB may be accessed
  1653.       via the DOS list of lists (see AH=52h) if disk access is not
  1654.       desirable.
  1655.     documented for DOS 5.0, but undocumented in prior versions
  1656. SeeAlso: AH=1Fh,AH=52h
  1657.  
  1658. Format of DOS Drive Parameter Block:
  1659. Offset    Size    Description
  1660.  00h    BYTE    drive number (00h = A:, 01h = B:, etc)
  1661.  01h    BYTE    unit number within device driver
  1662.  02h    WORD    bytes per sector
  1663.  04h    BYTE    highest sector number within a cluster
  1664.  05h    BYTE    shift count to convert clusters into sectors
  1665.  06h    WORD    number of reserved sectors at beginning of drive
  1666.  08h    BYTE    number of FATs
  1667.  09h    WORD    number of root directory entries
  1668.  0Bh    WORD    number of first sector containing user data
  1669.  0Dh    WORD    highest cluster number (number of data clusters + 1)
  1670.  0Fh    BYTE    number of sectors per FAT
  1671.  10h    WORD    sector number of first directory sector
  1672.  12h    DWORD    address of device driver header
  1673.  16h    BYTE    media ID byte
  1674.  17h    BYTE    00h if disk accessed, FFh if not
  1675.  18h    DWORD    pointer to next DPB
  1676. ---DOS 2.x---
  1677.  1Ch    WORD    cluster containing start of current directory, 0000h=root,
  1678.         FFFFh = unknown
  1679.  1Eh 64 BYTEs    ASCIZ pathname of current directory for drive
  1680. ---DOS 3.x---
  1681.  1Ch    WORD    cluster at which to start search for free space when writing
  1682.  1Eh    WORD    number of free clusters on drive, FFFFh = unknown
  1683. ---DOS 4.0-5.0---
  1684.  0Fh    WORD    number of sectors per FAT
  1685.  11h    WORD    sector number of first directory sector
  1686.  13h    DWORD    address of device driver header
  1687.  17h    BYTE    media ID byte
  1688.  18h    BYTE    00h if disk accessed, FFh if not
  1689.  19h    DWORD    pointer to next DPB
  1690.  1Dh    WORD    cluster at which to start search for free space when writing
  1691.  1Fh    WORD    number of free clusters on drive, FFFFh = unknown
  1692. ----------2133-------------------------------
  1693. INT 21 - DOS 2+ - EXTENDED BREAK CHECKING
  1694.     AH = 33h
  1695.     AL = subfunction
  1696.         00h get current extended break state
  1697.         Return: DL = current state, 00h = off, 01h = on
  1698.         01h set state of extended ^C/^Break checking
  1699.         DL = 00h off, check only on character I/O functions
  1700.              01h on, check on all DOS functions
  1701. Note:    under DOS 3.1+, this function does not use any of the DOS-internal
  1702.       stacks and is thus fully reentrant
  1703. SeeAlso: AX=3302h
  1704. ----------213302-----------------------------
  1705. INT 21 - DOS 3.x+ internal - GET AND SET EXTENDED CONTROL-BREAK CHECKING STATE
  1706.     AX = 3302h
  1707.     DL = new state
  1708.          00h for OFF or 01h for ON
  1709. Return: DL = old state of extended BREAK checking
  1710. Note:    this function does not use any of the DOS-internal stacks and is thus
  1711.       fully reentrant
  1712. SeeAlso: AH=33h
  1713. ----------213305-----------------------------
  1714. INT 21 - DOS 4+ - GET BOOT DRIVE
  1715.     AX = 3305h
  1716. Return: DL = boot drive (1=A:,...)
  1717. Notes:    fully reentrant
  1718.     NEC 9800-series PCs always call the boot drive A: and assign the other
  1719.       drive letters sequentially to the other drives in the system
  1720. ----------213306-----------------------------
  1721. INT 21 - DOS 5.0 - GET TRUE VERSION NUMBER
  1722.     AX = 3306h
  1723. Return:    BL = major version
  1724.     BH = minor version
  1725.     DL = revision (bits 2-0, all others 0)
  1726.     DH = version flags
  1727.         bit 3: DOS is in ROM
  1728.         bit 4: DOS in in HMA
  1729. Note:    this function always returns the true version number, unlike AH=30h,
  1730.       whose return value may be changed with SETVER
  1731.     fully reentrant
  1732. SeeAlso: AH=30h
  1733. ----------21330F-----------------------------
  1734. INT 21 - VIRUS - "Burghofer" - INSTALLATION CHECK
  1735.     AX = 330Fh
  1736. Return: AL = 0Fh if resident (DOS returns AL=FFh)
  1737. SeeAlso: AX=30F1h,AX=33E0h
  1738. ----------2133E0-----------------------------
  1739. INT 21 - VIRUS - "Oropax" - INSTALLATION CHECK
  1740.     AX = 33E0h
  1741. Return: AL = E0h if resident (DOS returns AL=FFh)
  1742. SeeAlso: AX=330Fh,AX=357Fh
  1743. ----------2134-------------------------------
  1744. INT 21 - DOS 2+ - GET ADDRESS OF INDOS FLAG
  1745.     AH = 34h
  1746. Return: ES:BX -> one-byte InDOS flag
  1747. Notes:    the value of InDOS is incremented whenever an INT 21 function begins
  1748.       and decremented whenever one completes
  1749.     during an INT 28 call, it is safe to call some INT 21 functions even
  1750.       though InDOS may be 01h instead of zero
  1751.     InDOS alone is not sufficient for determining when it is safe to
  1752.       enter DOS, as the critical error handling decrements InDOS and
  1753.       increments the critical error flag for the duration of the critical
  1754.       error.  Thus, it is possible for InDOS to be zero even if DOS is
  1755.       busy.
  1756.     the critical error flag is the byte immediately following InDOS in
  1757.       DOS 2.x, and the byte BEFORE the InDOS flag in DOS 3+ (except COMPAQ
  1758.       DOS 3.0, where the critical error flag is located 1AAh bytes BEFORE
  1759.       the critical section flag)
  1760.     For DOS 3.1+, an undocumented call exists to get the address of the
  1761.       critical error flag (see AX=5D06h)
  1762. SeeAlso: AX=5D06h,AX=5D0Bh,INT 28
  1763. ----------2135-------------------------------
  1764. INT 21 - DOS 2+ - GET INTERRUPT VECTOR
  1765.     AH = 35h
  1766.     AL = interrupt number
  1767. Return: ES:BX -> current interrupt handler
  1768. SeeAlso: AH=25h
  1769. ----------21357F-----------------------------
  1770. INT 21 - VIRUS - "Agiplan"/"Month 4-6" - INSTALLATION CHECK
  1771.     AX = 357Fh
  1772. Return: DX = FFFFh if installed
  1773. SeeAlso: AX=33E0h,AX=3DFFh
  1774. ----------2136-------------------------------
  1775. INT 21 - DOS 2+ - GET FREE DISK SPACE
  1776.     AH = 36h
  1777.     DL = drive number (00h = default, 01h = A:, etc)
  1778. Return: AX = FFFFh if invalid drive
  1779.     else
  1780.         AX = sectors per cluster
  1781.         BX = number of free clusters
  1782.         CX = bytes per sector
  1783.         DX = total clusters on drive
  1784. Notes:    free space on drive in bytes is AX * BX * CX
  1785.     total space on drive in bytes is AX * CX * DX
  1786.     "lost clusters" are considered to be in use
  1787.     according to Dave Williams' MSDOS reference, the value in DX is
  1788.       incorrect for non-default drives after ASSIGN is run
  1789. SeeAlso: AH=1Bh,AH=1Ch
  1790. ----------213700-----------------------------
  1791. INT 21 - DOS 2+ - "SWITCHAR" - GET SWITCH CHARACTER
  1792.     AX = 3700h
  1793. Return: AL = status
  1794.         00h successful
  1795.         DL = current switch character
  1796.         FFh unsupported subfunction
  1797. Notes:    documented in some OEM versions of some releases of DOS
  1798.     supported by OS/2 compatibility box
  1799.     always returns AL=2Fh for DOS 5.0
  1800. SeeAlso: AX=3701h
  1801. ----------213701-----------------------------
  1802. INT 21 - DOS 2+ - "SWITCHAR" - SET SWITCH CHARACTER
  1803.     AX = 3701h
  1804.     DL = new switch character
  1805. Return: AL = status
  1806.         00h successful
  1807.         FFh unsupported subfunction
  1808. Notes:    documented in some OEM versions of some releases of DOS
  1809.     supported by OS/2 compatibility box
  1810.     ignored by DOS 5.0
  1811. SeeAlso: AX=3700h
  1812. ----------2137-------------------------------
  1813. INT 21 - DOS 2.x and 3.3+ only - "AVAILDEV" - SPECIFY \DEV\ PREFIX USE
  1814.     AH = 37h
  1815.     AL = subfunction
  1816.         02h get availdev flag
  1817.         Return: DL = 00h \DEV\ must precede character device names
  1818.                = nonzero \DEV\ is optional
  1819.         03h set availdev flag
  1820.         DL = 00h    \DEV\ is mandatory
  1821.            = nonzero    \DEV\ is optional
  1822. Return: AL = status
  1823.         00h successful
  1824.         FFh unsupported subfunction
  1825. Notes:    all versions of DOS from 2.00 allow \DEV\ to be prepended to device
  1826.       names without generating an error even if the directory \DEV does
  1827.       not actually exist (other paths generate an error if they do not
  1828.       exist).
  1829.     although DOS 3.3+ accepts these calls, they have no effect, and
  1830.       AL=02h always returns DL=FFh
  1831. ----------2138-------------------------------
  1832. INT 21 - DOS 2+ - GET COUNTRY-SPECIFIC INFORMATION
  1833.     AH = 38h
  1834. --DOS 2.x--
  1835.     AL = 00h get current-country info
  1836.     DS:DX -> buffer for returned info (see below)
  1837. Return: CF set on error
  1838.         AX = error code (02h)
  1839.     CF clear if successful
  1840.         AX = country code (MSDOS 2.11 only)
  1841.         buffer at DS:DX filled
  1842. --DOS 3+--
  1843.     AL = 00h for current country
  1844.     AL = 01h thru 0FEh for specific country with code <255
  1845.     AL = 0FFh for specific country with code >= 255
  1846.        BX = 16-bit country code
  1847.     DS:DX -> buffer for returned info (see below)
  1848. Return:    CF set on error
  1849.         AX = error code (02h)
  1850.     CF clear if successful
  1851.         BX = country code
  1852.         DS:DX buffer filled
  1853. SeeAlso: AH=65h,INT 10/AX=5001h,INT 2F/AX=110Ch,INT 2F/AX=1404h
  1854.  
  1855. Format of PCDOS 2.x country info:
  1856. Offset    Size    Description
  1857.  00h    WORD    date format  0 = USA    mm dd yy
  1858.                  1 = Europe dd mm yy
  1859.                  2 = Japan    yy mm dd
  1860.  02h    BYTE    currency symbol
  1861.  03h    BYTE    00h
  1862.  04h    BYTE    thousands separator char
  1863.  05h    BYTE    00h
  1864.  06h    BYTE    decimal separator char
  1865.  07h    BYTE    00h
  1866.  08h 24 BYTEs    reserved
  1867.  
  1868. Format of MSDOS 2.x,DOS 3+ country info:
  1869. Offset    Size    Description
  1870.  00h    WORD    date format (see above)
  1871.  02h  5 BYTEs    ASCIZ currency symbol string
  1872.  07h  2 BYTEs    ASCIZ thousands separator
  1873.  09h  2 BYTEs    ASCIZ decimal separator
  1874.  0Bh  2 BYTEs    ASCIZ date separator
  1875.  0Dh  2 BYTEs    ASCIZ time separator
  1876.  0Fh    BYTE    currency format
  1877.         bit 2 = set if currency symbol replaces decimal point
  1878.         bit 1 = number of spaces between value and currency symbol
  1879.         bit 0 = 0 if currency symbol precedes value
  1880.             1 if currency symbol follows value
  1881.  10h    BYTE    number of digits after decimal in currency
  1882.  11h    BYTE    time format
  1883.         bit 0 = 0 if 12-hour clock
  1884.             1 if 24-hour clock
  1885.  12h    DWORD    address of case map routine
  1886.         (FAR CALL, AL = character to map to upper case [>= 80h])
  1887.  16h  2 BYTEs    ASCIZ data-list separator
  1888.  18h 10 BYTEs    reserved
  1889.  
  1890. Values for country code:
  1891.  001h    United States
  1892.  002h    Canadian-French
  1893.  003h    Latin America
  1894.  01Fh    Netherlands
  1895.  020h    Belgium
  1896.  021h    France
  1897.  022h    Spain
  1898.  024h    Hungary (not supported by DR-DOS 5.0)
  1899.  026h    Yugoslavia (not supported by DR-DOS 5.0)
  1900.  027h    Italy
  1901.  029h    Switzerland
  1902.  02Ah    Czechoslovakia (not supported by DR-DOS 5.0)
  1903.  02Bh    Austria (DR-DOS 5.0)
  1904.  02Ch    United Kingdom
  1905.  02Dh    Denmark
  1906.  02Eh    Sweden
  1907.  02Fh    Norway
  1908.  030h    Poland (not supported by DR-DOS 5.0)
  1909.  031h    Germany
  1910.  037h    Brazil (not supported by DR-DOS 5.0)
  1911.  03Dh    International English [Australia in DR-DOS 5.0]
  1912.  051h    Japan (DR-DOS 5.0)
  1913.  052h    Korea (DR-DOS 5.0)
  1914.  15Fh    Portugal
  1915.  166h    Finland
  1916.  311h    Middle East (DR-DOS 5.0)
  1917.  3CCh    Israel (DR-DOS 5.0)
  1918. ----------2138-------------------------------
  1919. INT 21 - DOS 3+ - SET COUNTRY CODE
  1920.     AH = 38h
  1921.     AL = 01h thru 0FEh for specific country with code <255
  1922.     AL = FFh for specific country with code >= 255
  1923.        BX = 16-bit country code
  1924.     DX = FFFFh
  1925. Return: CF set on error
  1926.         AX = error code (see AH=59h)
  1927.     CF clear if successful
  1928. Note:    not supported by OS/2
  1929. SeeAlso: INT 2F/AX=1403h
  1930. ----------2139-------------------------------
  1931. INT 21 - DOS 2+ - "MKDIR" - CREATE SUBDIRECTORY
  1932.     AH = 39h
  1933.     DS:DX -> ASCIZ pathname
  1934. Return: CF clear if successful
  1935.         AX destroyed
  1936.     CF set on error
  1937.         AX = error code (03h,05h) (see AH=59h)
  1938. Notes:    all directories in the given path except the last must exist
  1939.     fails if the parent directory is the root and is full
  1940.     DOS 2.x-3.3 allow the creation of a directory sufficiently deep that
  1941.       it is not possible to make that directory the current directory
  1942.       because the path would exceed 64 characters
  1943. SeeAlso: AH=3Ah,AH=3Bh,INT 2F/AX=1103h
  1944. ----------213A-------------------------------
  1945. INT 21 - DOS 2+ - "RMDIR" - REMOVE SUBDIRECTORY
  1946.     AH = 3Ah
  1947.     DS:DX -> ASCIZ pathname of directory to be removed
  1948. Return: CF clear if successful
  1949.         AX destroyed
  1950.     CF set on error
  1951.         AX = error code (03h,05h,06h,10h) (see AH=59h)
  1952. Note:    directory must be empty (contain only '.' and '..' entries)
  1953. SeeAlso: AH=39h,AH=3Bh,INT 2F/AX=1101h
  1954. ----------213B-------------------------------
  1955. INT 21 - DOS 2+ - "CHDIR" - SET CURRENT DIRECTORY
  1956.     AH = 3Bh
  1957.     DS:DX -> ASCIZ pathname to become current directory (max 64 bytes)
  1958. Return: CF clear if successful
  1959.         AX destroyed
  1960.     CF set on error
  1961.         AX = error code (03h) (see AH=59h)
  1962. Notes:    if new directory name includes a drive letter, the default drive is
  1963.       not changed, only the current directory on that drive
  1964.     changing the current directory also changes the directory in which
  1965.       FCB file calls operate
  1966. SeeAlso: AH=47h,INT 2F/AX=1105h
  1967. ----------213C-------------------------------
  1968. INT 21 - DOS 2+ - "CREAT" - CREATE OR TRUNCATE FILE
  1969.     AH = 3CH
  1970.     CX = file attribute
  1971.         bit 0: read-only
  1972.         1: hidden
  1973.         2: system
  1974.         3: volume label (ignored)
  1975.         4: reserved, must be zero (directory)
  1976.         5: archive bit
  1977.         7: if set, file is shareable under Novell NetWare
  1978.     DS:DX -> ASCIZ filename
  1979. Return: CF clear if successful
  1980.         AX = file handle
  1981.     CF set on error
  1982.         AX = error code (03h,04h,05h) (see AH=59h)
  1983. Note:    if a file with the given name exists, it is truncated to zero length
  1984. SeeAlso: AH=16h,AH=3Dh,AH=5Ah,AH=5Bh
  1985. ----------213D-------------------------------
  1986. INT 21 - DOS 2+ - "OPEN" - OPEN EXISTING FILE
  1987.     AH = 3Dh
  1988.     AL = access and sharing modes
  1989.         bits 2-0: access mode
  1990.         000 read only
  1991.         001 write only
  1992.         010 read/write
  1993.         bit 3: reserved (0)
  1994.         bits 6-4: sharing mode (DOS 3+)
  1995.         000 compatibility mode
  1996.         001 "DENYALL" prohibit both read and write access by others
  1997.         010 "DENYWRITE" prohibit write access by others
  1998.         011 "DENYREAD" prohibit read access by others
  1999.         100 "DENYNONE" allow full access by others
  2000.         bit 7: inheritance
  2001.         if set, file is private to current process and will not be
  2002.           inherited by child processes
  2003.     DS:DX -> ASCIZ filename
  2004.     CL = attribute mask of files to look for (server call only)
  2005. Return: CF clear if successful
  2006.         AX = file handle
  2007.     CF set on error
  2008.         AX = error code (01h,02h,03h,04h,05h,0Ch) (see AH=59h)
  2009. Notes:    file pointer is set to start of file
  2010.     file handles which are inherited from a parent also inherit sharing
  2011.       and access restrictions
  2012.     files may be opened even if given the hidden or system attributes
  2013. SeeAlso: AH=0Fh,AH=3Ch,AX=4301h,AX=5D00h,INT 2F/AX=1226h
  2014.  
  2015. File sharing behavior:
  2016.       |    Second and subsequent Opens
  2017.  First      |Compat  Deny      Deny     Deny    Deny
  2018.  Open      |       All      Write     Read    None
  2019.       |R W RW R W RW R W RW R W RW R W RW
  2020.  - - - - -| - - - - - - - - - - - - - - - - -
  2021.  Compat    R |Y Y Y  N N N     1 N N    N N N  1 N N
  2022.     W |Y Y Y  N N N     N N N    N N N  N N N
  2023.     RW|Y Y Y  N N N     N N N    N N N  N N N
  2024.  - - - - -|
  2025.  Deny    R |C C C  N N N     N N N    N N N  N N N
  2026.  All    W |C C C  N N N     N N N    N N N  N N N
  2027.     RW|C C C  N N N     N N N    N N N  N N N
  2028.  - - - - -|
  2029.  Deny    R |2 C C  N N N     Y N N    N N N  Y N N 
  2030.  Write    W |C C C  N N N     N N N    Y N N  Y N N 
  2031.     RW|C C C  N N N     N N N    N N N  Y N N
  2032.  - - - - -|
  2033.  Deny    R |C C C  N N N     N Y N    N N N  N Y N
  2034.  Read    W |C C C  N N N     N N N    N Y N  N Y N
  2035.     RW|C C C  N N N     N N N    N N N  N Y N
  2036.  - - - - -|
  2037.  Deny    R |2 C C  N N N     Y Y Y    N N N  Y Y Y
  2038.  None    W |C C C  N N N     N N N    Y Y Y  Y Y Y
  2039.     RW|C C C  N N N     N N N    N N N  Y Y Y
  2040. Legend: Y = open succeeds, N = open fails with error code 05h
  2041.     C = open fails, INT 24 generated
  2042.     1 = open succeeds if file read-only, else fails with error code
  2043.     2 = open succeeds if file read-only, else fails with INT 24
  2044. ----------213DFF-----------------------------
  2045. INT 21 - VIRUS - "JD-448" - INSTALLATION CHECK
  2046.     AX = 3DFFh
  2047. Return: AX = 4A44h if resident
  2048. SeeAlso: AX=357Fh,AX=4203h
  2049. ----------213E-------------------------------
  2050. INT 21 - DOS 2+ - "CLOSE" - CLOSE FILE
  2051.     AH = 3Eh
  2052.     BX = file handle
  2053. Return: CF clear if successful
  2054.         AX destroyed
  2055.     CF set on error
  2056.         AX = error code (06h) (see AH=59h)
  2057. Note:    if the file was written to, any pending disk writes are performed, the
  2058.       time and date stamps are set to the current time, and the directory
  2059.       entry is updated
  2060. SeeAlso: AH=10h,AH=3Ch,AH=3Dh,INT 2F/AX=1106h,INT 2F/AX=1227h
  2061. ----------213F-------------------------------
  2062. INT 21 - DOS 2+ - "READ" - READ FROM FILE OR DEVICE
  2063.     AH = 3Fh
  2064.     BX = file handle
  2065.     CX = number of bytes to read
  2066.     DS:DX -> buffer for data
  2067. Return: CF clear if successful
  2068.         AX = number of bytes actually read (0 if at EOF before call)
  2069.     CF set on error
  2070.         AX = error code (05h,06h) (see AH=59h)
  2071. Notes:    data is read beginning at current file position, and the file position
  2072.       is updated after a successful read
  2073.     the returned AX may be smaller than the request in CX if a partial
  2074.       read occurred
  2075.     if reading from CON, read stops at first CR
  2076. SeeAlso: AH=27h,AH=40h,INT 2F/AX=1108h,INT 2F/AX=1229h
  2077. ----------213F-------------------------------
  2078. INT 21 - Turbo Debug HARDWARE BREAKPOINTS - READ STATUS BLOCK
  2079.     AH = 3Fh
  2080.     BX = handle for character device "TDHDEBUG"
  2081.     CX = number of bytes to read
  2082.     DS:DX -> buffer for status block (see below)
  2083. Return: CF clear if successful
  2084.         AX = number of bytes actually read
  2085.     CF set on error
  2086.         AX = error code (05h,06h) (see AH=59h)
  2087. SeeAlso: AH=40h"Turbo Debug"
  2088.  
  2089. Format of status block:
  2090. Offset    Size    Description
  2091.  00h    BYTE    status of command
  2092.         00h successful
  2093.         01h invalid handle
  2094.         02h no more breakpoints available
  2095.         03h hardware does not support specified breakpoint type
  2096.         04h previous command prevents execution
  2097.         05h debugger hardware not found
  2098.         06h hardware failure
  2099.         07h invalid command
  2100.         08h driver not initialized yet
  2101.         FEh recursive entry (hardware breakpoint inside hw bp handler)
  2102. ---status for command 01h---
  2103.  01h    WORD    device driver interface version number (currently 1)
  2104.  03h    WORD    device driver software version
  2105.  05h    BYTE    maximum simultaneous hardware breakpoints
  2106.  06h    BYTE    configuration bits
  2107.         bit 0: CPU and DMA accesses are distinct
  2108.             1: can detect DMA transfers
  2109.             2: supports data mask
  2110.             3: hardware pass counter on breakpoints
  2111.             4: can match on data as well as addresses
  2112.  07h    BYTE    supported breakpoint types
  2113.         bit 0: memory read
  2114.             1: memory write
  2115.             2: memory read/write
  2116.             3: I/O read
  2117.             4: I/O write
  2118.             5: I/O read/write
  2119.             6: instruction fetch
  2120.  08h    WORD    supported addressing match modes
  2121.         bit 0: any address
  2122.             1: equal to test value
  2123.             2: not equal
  2124.             3: above test value
  2125.             4: below test value
  2126.             5: below or equal
  2127.             6: above or equal
  2128.             7: within range
  2129.             8: outside range
  2130.  0Ah    WORD    supported data matches
  2131.         bit 0: any data
  2132.             1: equal to test value
  2133.             2: not equal
  2134.             3: above test value
  2135.             4: below test value
  2136.             5: below or equal
  2137.             6: above or equal
  2138.             7: within range
  2139.             8: outside range
  2140.  0Ch    BYTE    maximum data match length (01h, 02h, or 04h)
  2141.  0Dh    WORD    size of onboard memory (in K)
  2142.  0Fh    WORD    maximum number of trace-back events
  2143.  11h    WORD    hardware breakpoint enable byte address segment (0000h if not
  2144.         supported)
  2145. ---status for command 04h---
  2146.  01h    BYTE    handle to use when referring to the just-set breakpoint
  2147. ----------2140-------------------------------
  2148. INT 21 - DOS 2+ - "WRITE" - WRITE TO FILE OR DEVICE
  2149.     AH = 40h
  2150.     BX = file handle
  2151.     CX = number of bytes to write
  2152.     DS:DX -> data to write
  2153. Return: CF clear if successful
  2154.         AX = number of bytes actually written
  2155.     CF set on error
  2156.         AX = error code (05h,06h) (see AH=59h)
  2157. Notes:    if CX is zero, no data is written, and the file is truncated or
  2158.       extended to the current position
  2159.     data is written beginning at current file position, and the file
  2160.       position is updated after a successful write
  2161.     the usual cause for AX < CX on return is a full disk
  2162. SeeAlso: AH=28h,AH=3Fh,INT 2F/AX=1109h
  2163. ----------2140-------------------------------
  2164. INT 21 - Turbo Debug HARDWARE BREAKPOINTS - SEND CMD TO HARDWARE BRKPNT DRIVER
  2165.     AH = 40h
  2166.     BX = handle for character device "TDHDEBUG"
  2167.     CX = number of bytes to write
  2168.     DS:DX -> hardware breakpoint command (see below)
  2169. Return: CF clear if successful
  2170.         AX = number of bytes actually written
  2171.     CF set on error
  2172.         AX = error code (05h,06h) (see AH=59h)
  2173. Note:    results are retrieved by reading from the device
  2174. SeeAlso: AH=3Fh"Turbo Debug"
  2175.  
  2176. Format of hardware breakpoint commands:
  2177. Offset    Size    Description
  2178.  00h    BYTE    command code
  2179.         00h install interrupt vectors
  2180.         01h get hardware capabilities
  2181.         02h enable hardware breakpoints
  2182.         03h disable hardware breakpoints
  2183.         04h set hardware breakpoint
  2184.         05h clear hardware breakpoint
  2185.         06h set I/O base address and reset hardware
  2186.         07h restore interrupt vectors
  2187. ---command code 00h---
  2188.  01h    DWORD    pointer to Turbo Debugger entry point to be jumped to on
  2189.         hardware breakpoint; call with CPU state the same as on
  2190.         the breakpoint except for pushing AX and placing an entry
  2191.         code (FFh if breakout button or breakpoint handle) in AH
  2192. ---command code 04h---
  2193.  01h    BYTE    breakpoint type
  2194.         00h memory read
  2195.         01h memory write
  2196.         02h memory read/write
  2197.         03h I/O read
  2198.         04h I/O write
  2199.         05h I/O read/write
  2200.         06h instruction fetch
  2201.  02h    BYTE    address matching mode
  2202.         00h any address
  2203.         01h equal to test value
  2204.         02h different from test value
  2205.         03h above test value
  2206.         04h below test value
  2207.         05h below or equal to test value
  2208.         06h above or equal to test value
  2209.         07h within inclusive range
  2210.         08h outside specified range
  2211.  03h    DWORD    32-bit linear low address
  2212.  07h    DWORD    32-bit linear high address
  2213.  0Bh    WORD    pass count
  2214.  0Dh    BYTE    data size (01h, 02h, or 04h)
  2215.  0Eh    BYTE    source of matched bus cycle
  2216.         01h CPU
  2217.         02h DMA
  2218.         03h either
  2219.  0Fh    BYTE    data-matching mode
  2220.         00h match any
  2221.         01h equal to test value
  2222.         02h different from test value
  2223.         03h above test value
  2224.         04h below test value
  2225.         05h below or equal to test value
  2226.         06h above or equal to test value
  2227.         07h within specified range
  2228.         08h outside specified range
  2229.  10h    DWORD    low data value
  2230.  14h    DWORD    high data value
  2231.  18h    DWORD    data mask specifying which bits of the data are tested
  2232. ---command code 05h---
  2233.  01h    BYTE    handle of breakpoint to clear (breakpoint returned from command
  2234.         04h)
  2235. ---command code 06h---
  2236.  01h    WORD    base address of hardware debugger board
  2237. ----------214000BX0002-----------------------
  2238. INT 21 - FARTBELL.EXE - INSTALLATION CHECK
  2239.     AX = 4000h
  2240.     BX = 0002h
  2241.     CX = 0000h
  2242.     DS:DX = 0000h:0000h
  2243. Return: CF clear if installed
  2244.         AX = CS of resident code
  2245. Note:    FARTBELL is a joke program by Guenther Thiele which makes various
  2246.       noises when programs output a bell
  2247. SeeAlso: AX=4001h
  2248. ----------214001BX0002-----------------------
  2249. INT 21 - FARTBELL.EXE - FORCE NOISE
  2250.     AX = 4001h
  2251.     BX = 0002h
  2252.     CX = 0000h
  2253.     DS:DX = 0000h:0000h
  2254. Note:    FARTBELL is a joke program by Guenther Thiele which makes various
  2255.       noises when programs output a bell
  2256. SeeAlso: AX=4000h
  2257. ----------2141-------------------------------
  2258. INT 21 - DOS 2+ - "UNLINK" - DELETE FILE
  2259.     AH = 41h
  2260.     DS:DX -> ASCIZ filename (no wildcards, but see below)
  2261.     CL = attribute mask for deletion (server call only, see below)
  2262. Return: CF clear if successful
  2263.         AX destroyed (DOS 3.3) AL seems to be drive of deleted file
  2264.     CF set on error
  2265.         AX = error code (02h,03h,05h) (see AH=59h)
  2266. Notes:    (DOS 3.1+) wildcards are allowed if invoked via AX=5D00h, in which case
  2267.       the filespec must be canonical (as returned by AH=60h), and only
  2268.       files matching the attribute mask in CL are deleted
  2269.     DOS does not erase the file's data; it merely becomes inaccessible
  2270.       because the FAT chain for the file is cleared
  2271.     deleting a file which is currently open may lead to filesystem
  2272.       corruption.  Unless SHARE is loaded, DOS does not close the handles
  2273.       referencing the deleted file, thus allowing writes to a nonexistant
  2274.       file.
  2275. SeeAlso: AH=13h,AX=4301h,AX=5D00h,AH=60h,INT 2F/AX=1113h
  2276. ----------214101DXFFFE-----------------------
  2277. INT 21 - SoftLogic Data Guardian - ???
  2278.     AX = 4101h
  2279.     DX = FFFEh
  2280. Return: AX = 0000h if installed
  2281. Note:    resident code sets several internal variables on this call
  2282. ----------2142-------------------------------
  2283. INT 21 - DOS 2+ - "LSEEK" - SET CURRENT FILE POSITION
  2284.     AH = 42h
  2285.     AL = origin of move
  2286.         00h start of file
  2287.         01h current file position
  2288.         02h end of file
  2289.     BX = file handle
  2290.     CX:DX = offset from origin of new file position
  2291. Return: CF clear if successful
  2292.         DX:AX = new file position in bytes from start of file
  2293.     CF set on error
  2294.         AX = error code (01h,06h) (see AH=59h)
  2295. Notes:    for origins 01h and 02h, the pointer may be positioned before the
  2296.       start of the file; no error is returned in that case, but subsequent
  2297.       attempts at I/O will produce errors
  2298.     if the new position is beyond the current end of file, the file will
  2299.       be extended by the next write (see AH=40h)
  2300. SeeAlso: AH=24h,INT 2F/AX=1228h
  2301. ----------214203-----------------------------
  2302. INT 21 - VIRUS - "Shake" - INSTALLATION CHECK
  2303.     AX = 4203h
  2304. Return: AX = 1234h if resident
  2305. SeeAlso: AX=3DFFh,AX=4243h
  2306. ----------214243-----------------------------
  2307. INT 21 - VIRUS - "Invader" - INSTALLATION CHECK
  2308.     AX = 4243h
  2309. Return: AX = 5678h if resident
  2310. SeeAlso: AX=4203h,AX=4B04h
  2311. ----------214300-----------------------------
  2312. INT 21 - DOS 2+ - GET FILE ATTRIBUTES
  2313.     AX = 4300h
  2314.     DS:DX -> ASCIZ filename
  2315. Return: CF clear if successful
  2316.         CX = attributes (see AX=4301h)
  2317.         AX = CX (DR-DOS 5.0)
  2318.     CF set on error
  2319.         AX = error code (01h,02h,03h,05h) (see AH=59h)
  2320. SeeAlso: AX=4301h,AH=B6h,INT 2F/AX=110Fh
  2321. ----------214301-----------------------------
  2322. INT 21 - DOS 2+ - "CHMOD" - SET FILE ATTRIBUTES
  2323.     AX = 4301h
  2324.     CX = new attributes
  2325.         bit 8: shareable (Novell NetWare)
  2326.         7: unused
  2327.         6: unused
  2328.         5: archive
  2329.         4: directory
  2330.         3: volume label
  2331.         2: system
  2332.         1: hidden
  2333.         0: read-only
  2334.     DS:DX -> ASCIZ filename
  2335. Return: CF clear if successful
  2336.         AX destroyed
  2337.     CF set on error
  2338.         AX = error code (01h,02h,03h,05h) (see AH=59h)
  2339. Notes:    will not change volume label or directory attributes
  2340.     MSDOS 4.01 reportedly closes the file if it is currently open
  2341. SeeAlso: AX=4300h,INT 2F/AX=110Eh
  2342. ----------214302-----------------------------
  2343. INT 21 - DR-DOS 3.41+ internal - GET ACCESS RIGHTS
  2344.     AX = 4302h
  2345.     DS:DX -> ASCIZ pathname
  2346. Return: CF clear if successful
  2347.         CX = access rights
  2348.         bit 0 delete requires password
  2349.         bit 2 write requires password
  2350.         bit 3 read requires password
  2351.         bits 4-7=equal to bits 0-3
  2352.         bits 8-11=equal to bits 0-3
  2353.         AX = CX (DR-DOS 5.0)
  2354.     CF set on error
  2355.         AX = error code
  2356. SeeAlso: AX=4303h
  2357. ----------214303-----------------------------
  2358. INT 21 - DR-DOS 3.41+ internal - SET ACCESS RIGHTS AND PASSWORD
  2359.     AX = 4303h
  2360.     CX = access rights
  2361.          bit 0 delete requires password
  2362.          bit 2 write requires password
  2363.          bit 3 read requires password
  2364.          bits 4-7=equal to bits 0-3
  2365.          bits 8-11=equal to bits 0-3
  2366.          bit 15 new password is to be set
  2367.     DS:DX -> ASCIZ pathname
  2368.     [DTA] = new password if CX bit 15 is set (blank-padded to 8 characters)
  2369. Return: CF clear if successful
  2370.     CF set on error
  2371.         AX = error code
  2372. Note:    if the file is already protected, the old password must be added after
  2373.       the pathname, separated by a ";"
  2374. SeeAlso: AX=4302h,AX=4454h
  2375. ----------214304-----------------------------
  2376. INT 21 - DR-DOS 5.0 internal - GET ???
  2377.     AX = 4304h
  2378.     ???
  2379. Return: CF clear if successful
  2380.         CX = AX = ???
  2381.     CF set on error
  2382.         AX = error code (see AH=59h)
  2383. SeeAlso: AX=4305h
  2384. ----------214305-----------------------------
  2385. INT 21 - DR-DOS 5.0 internal - SET ???
  2386.     AX = 4305h
  2387.     ???
  2388. Return: CF clear if successful
  2389.     CF set on error
  2390.         AX = error code (see AH=59h)
  2391. SeeAlso: AX=4304h
  2392. ----------214400-----------------------------
  2393. INT 21 - DOS 2+ - IOCTL - GET DEVICE INFORMATION
  2394.     AX = 4400h
  2395.     BX = handle
  2396. Return: CF clear if successful
  2397.         DX = device information word
  2398.         character device
  2399.           14: device driver can process IOCTL requests (see AX=4402h)
  2400.           13: output until busy supported
  2401.           11: driver supports OPEN/CLOSE calls
  2402.            7: set (indicates device)
  2403.            6: EOF on input
  2404.            5: raw (binary) mode
  2405.            4: device is special (uses INT 29)
  2406.            3: clock device
  2407.            2: NUL device
  2408.            1: standard output
  2409.            0: standard input
  2410.         disk file
  2411.           15: file is remote (DOS 3+)
  2412.           14: don't set file date/time on closing (DOS 3+)
  2413.           11: media not removable
  2414.            8: (DOS 4+) generate INT 24 if no disk space on write
  2415.            7: clear (indicates file)
  2416.            6: file has not been written
  2417.          5-0: drive number (0 = A:)
  2418.         AX destroyed
  2419.     CF set on error
  2420.         AX = error code (01h,05h,06h) (see AH=59h)
  2421. Note:    value in DH corresponds to high byte of device driver's attribute word
  2422.       if handle refers to a character device
  2423. SeeAlso: AX=4401h,INT 2F/AX=122Bh
  2424. ----------214401-----------------------------
  2425. INT 21 - DOS 2+ - IOCTL - SET DEVICE INFORMATION
  2426.     AX = 4401h
  2427.     BX = handle (must refer to character device)
  2428.     DX = device information word (see AX=4400h)
  2429.         (DH must be zero)
  2430. Return: CF clear if successful
  2431.     CF set on error
  2432.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2433. SeeAlso: AX=4400h,INT 2F/AX=122Bh
  2434. ----------214402-----------------------------
  2435. INT 21 - DOS 2+ - IOCTL - READ FROM CHARACTER DEVICE CONTROL CHANNEL
  2436.     AX = 4402h
  2437.     BX = file handle referencing character device
  2438.     CX = number of bytes to read
  2439.     DS:DX -> buffer
  2440. Return: CF clear if successful
  2441.         AX = number of bytes actually read
  2442.     CF set on error
  2443.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2444. Note:    format of data is driver-specific (see below for some specific cases)
  2445. SeeAlso: AX=4400h,AX=4403h,AX=4404h,INT 2F/AX=122Bh
  2446. ----------214402-----------------------------
  2447. INT 21 - Network Driver Interface Spec 2.0.1 - PROTOCOL MANAGER
  2448.     AX = 4402h
  2449.     BX = file handle for device "PROTMAN$"
  2450.     DS:DX -> request block (see below)
  2451.     CX = 000Eh (size of request block)
  2452.  
  2453. Format of request block for GetProtocolManagerInfo:
  2454. Offset    Size    Description
  2455.  00h    WORD    01h
  2456.  02h    WORD    returned status (see below)
  2457.  04h    DWORD    returned pointer to structure representing parsed user config
  2458.  08h    DWORD    unused
  2459.  0Ch    WORD    returned BCD version of NDIS on which Protocol Manager is based
  2460.  
  2461. Format of request block for RegisterModule:
  2462. Offset    Size    Description
  2463.  00h    WORD    02h
  2464.  02h    WORD    returned status (see below)
  2465.  04h    DWORD    pointer to module's common characteristics table (see below)
  2466.  08h    DWORD    pointer to list of modules to which the module is to be bound
  2467.  0Ch    WORD    unused
  2468.  
  2469. Format of request block for BindAndStart:
  2470. Offset    Size    Description
  2471.  00h    WORD    03h
  2472.  02h    WORD    returned status (see below)
  2473.  04h    DWORD    caller's virtual address in FailingModules structure
  2474.  08h    DWORD    unused
  2475.  0Ch    WORD    unused
  2476.  
  2477. Format of request block for GetProtocolManagerLinkage:
  2478. Offset    Size    Description
  2479.  00h    WORD    04h
  2480.  02h    WORD    returned status (see below)
  2481.  04h    DWORD    returned dispatch point
  2482.  08h    DWORD    unused
  2483.  0Ch    WORD    returned protocol manager DS
  2484. Note:    the dispatch point may be called as follows instead of using this IOCTL
  2485.     STACK: WORD  protocol manager DS
  2486.            DWORD pointer to request block
  2487.     Return: AX = returned status
  2488.         STACK popped
  2489.  
  2490. Format of request block for GetProtocolIniPath:
  2491. Offset    Size    Description
  2492.  00h    WORD    05h
  2493.  02h    WORD    returned status (see below)
  2494.  04h    DWORD    pointer to a buffer for the ASCIZ pathname of PROTOCOL.INI
  2495.  08h    DWORD    unused
  2496.  0Ch    WORD    buffer length
  2497.  
  2498. Format of request block for RegisterProtocolManagerInfo:
  2499. Offset    Size    Description
  2500.  00h    WORD    06h
  2501.  02h    WORD    returned status (see below)
  2502.  04h    DWORD    pointer to structure containing parsed user config file
  2503.  08h    DWORD    unused
  2504.  0Ch    WORD    length of structure
  2505.  
  2506. Format of request block for InitAndRegister:
  2507. Offset    Size    Description
  2508.  00h    WORD    07h
  2509.  02h    WORD    returned status (see below)
  2510.  04h    DWORD    unused
  2511.  08h    DWORD    poitner to ASCIZ name of the module to be prebind initialized
  2512.  0Ch    WORD    unused
  2513.  
  2514. Format of request block for UnbindAndStop:
  2515. Offset    Size    Description
  2516.  00h    WORD    08h
  2517.  02h    WORD    returned status (see below)
  2518.  04h    DWORD    failing modules as for BindAndStart
  2519.  08h    DWORD    if not 0000h:0000h, pointer to ASCIZ name of module to unbind
  2520.         if 0000h:0000h, terminate a set of previously dynamically
  2521.           bound protocol modules
  2522.  0Ch    WORD    unused
  2523.  
  2524. Format of request block for BindStatus:
  2525. Offset    Size    Description
  2526.  00h    WORD    09h
  2527.  02h    WORD    returned status (see below)
  2528.  04h    DWORD    must be 0000h:0000h
  2529.         on return, points to root tree
  2530.  08h    DWORD    0000h:0000h
  2531.  0Ch    WORD    unused under DOS
  2532.  
  2533. Format of request block for RegisterStatus:
  2534. Offset    Size    Description
  2535.  00h    WORD    0Ah
  2536.  02h    WORD    returned status (0000h, 0008h, 002Ch) (see below)
  2537.  04h    DWORD    0000h:0000h
  2538.  08h    DWORD    pointer to 16-byte ASCIZ module name
  2539.  0Ch    WORD    0000h
  2540.  
  2541. Values of status code:
  2542.  0000h success
  2543.  0001h wait for release--protocol has retained control of the data buffer
  2544.  0002h request queued
  2545.  0003h frame not recognized
  2546.  0004h frame rejected
  2547.  0005h frame should be forwarded
  2548.  0006h out of resource
  2549.  0007h invalid parameter
  2550.  0008h invalid function
  2551.  0009h not supported
  2552.  000Ah hardware error
  2553.  000Bh transmit error
  2554.  000Ch unrecognized destination
  2555.  000Dh buffer too small
  2556.  0020h already started
  2557.  0021h binding incomplete
  2558.  0022h driver not initialized
  2559.  0023h hardware not found
  2560.  0024h hardware failure
  2561.  0025h configuration failure
  2562.  0026h interrupt conflict
  2563.  0027h MAC incompatible
  2564.  0028h initialization failed
  2565.  0029h no binding
  2566.  002Ah network may be disconnected
  2567.  002Bh incompatible OS version
  2568.  002Ch already registered
  2569.  002Dh path not found
  2570.  002Eh insufficient memory
  2571.  002Fh info not found
  2572.  00FFh general failure
  2573.  F000h-FFFFh reserved for vendor-specific codes, treated as general failure
  2574.  
  2575. Format of common characteristics table:
  2576. Offset    Size    Description
  2577.  00h    WORD    size of table in bytes
  2578.  02h    BYTE    NDIS major version
  2579.  03h    BYTE    NDIS minor version
  2580.  04h    WORD    reserved
  2581.  06h    BYTE    module major version
  2582.  07h    BYTE    module minor version
  2583.  08h    DWORD    module function flag bits
  2584.         bit 0: binding at upper boundary supported
  2585.         bit 1: binding at lower boundary supported
  2586.         bit 2: dynamically bound
  2587.         bits 3-31 reserved, must be 0
  2588.  0Ch 16 BYTEs    ASCIZ module name
  2589.  1Ch    BYTE    upper boundary protocol level
  2590.         01h Media Access Control
  2591.         02h Data link
  2592.         03h network
  2593.         04h transport
  2594.         05h session
  2595.         FFh not specified
  2596.  1Dh    BYTE    upper boundary interface type
  2597.         for MACs: 1 = MAC
  2598.         for data links and transports: to be defined
  2599.         for session: 1 = NCB
  2600.         any level: 0 = private (ISV-defined)
  2601.  1Eh    BYTE    lower boundary protocol level
  2602.         00h physical
  2603.         01h Media Access Control
  2604.         02h Data link
  2605.         03h network
  2606.         04h transport
  2607.         05h session
  2608.         FFh not specified
  2609.  1Fh    BYTE    lower boundary interface type
  2610.         same as offset 1Dh
  2611.  20h    WORD    module ID filled in by protocol manager
  2612.  22h    WORD    module DS
  2613.  24h    DWORD    system request entry point
  2614.  28h    DWORD    pointer to service-specific characteristics
  2615.         0000h:0000h if none
  2616.  2Ch    DWORD    pointer to service-specific status
  2617.         0000h:0000h if none
  2618.  30h    DWORD    pointer to upper dispatch table (see below)
  2619.         0000h:0000h if none
  2620.  34h    DWORD    pointer to lower dispatch table (see below)
  2621.         0000h:0000h if none
  2622.  38h    DWORD    reserved, must be 0
  2623.  3Ch    DWORD    reserved, must be 0
  2624. Note:    for compatibility with NDIS 1.x.x, a major version of 00h is
  2625.       interpreted as 01h
  2626.  
  2627. Format of MAC Service-Specific Characteristics Table:
  2628. Offset    Size    Description
  2629.  00h    WORD    length of table in bytes
  2630.  02h 16 BYTEs    ASCIZ MAC type name, "802.3", "802.4", "802.5", "802.6", "DIX",
  2631.         "DIX+802.3", "APPLETALK", "ARCNET", "FDDI", "SDLC", "BSC",
  2632.         "HDLC", or "ISDN"
  2633.  12h    WORD    length of station addresses in bytes
  2634.  14h 16 BYTEs    permanent station address
  2635.  24h 16 BYTEs    current station address
  2636.  34h    DWORD    current functional adapter address (00000000h if none)
  2637.  38h    DWORD    pointer to multicast address list
  2638.  3Ch    DWORD    link speed in bits/sec
  2639.  40h    DWORD    service flags
  2640.         bit 0: supports broadcast
  2641.             1: supports multicast
  2642.             2: supports functional/group addressing
  2643.             3: supports promiscuous mode
  2644.             4: station address software settable
  2645.             5: statistics always current
  2646.             6: supports InitiateDiagnostics
  2647.             7: supports loopback
  2648.             8: MAC does primarily ReceiveChain indications instead of
  2649.                ReceiveLookahead indications
  2650.             9: supports IBM source routing
  2651.            10: supports MAC reset
  2652.            11: supports Open/Close adapter
  2653.            12: supports interrupt request
  2654.            13: supports source routing bridge
  2655.            14: supports GDT virtual addresses (OS/2 version)
  2656.            15: multiple TransferDatas allowed durign a single
  2657.                indication
  2658.            16: MAC normally sets FrameSize = 0 in ReceiveLookahead
  2659.            17-31: reserved, must be 0
  2660.  44h    WORD    maximum frame size which may be both sent and received
  2661.  46h    DWORD    total transmit buffer capacity in bytes
  2662.  4Ah    WORD    transmit buffer allocation block size in bytes
  2663.  4Ch    DWORD    total receive buffer capacity in bytes
  2664.  50h    WORD    receive buffer allocation block size in bytes
  2665.  52h  3 BYTEs    IEEE vendor code
  2666.  55h    BYTE    vendor adapter code
  2667.  56h    DWORD    pointer to ASCIZ vendor adapter description
  2668.  5Ah    WORD    IRQ used by adapter
  2669.  5Ch    WORD    transmit queue depth
  2670.  5Eh    WORD    maximum supported number of data blocks in buffer descriptors
  2671.  60h  N BYTEs    vendor-specific info
  2672.  
  2673. Format of NetBIOS Service-Specific Characteristics Table
  2674. Offset    Size    Description
  2675.  00h    WORD    length of table in bytes
  2676.  02h 16 BYTEs    ASCIZ type name of NetBIOS module
  2677.  12h    WORD    NetBIOS module code
  2678.  14h  N BYTEs    vendor-specific info
  2679.  
  2680. Format of MAC Service-Specific Status Table:
  2681. Offset    Size    Description
  2682.  00h    WORD    length of table in bytes
  2683.  02h    DWORD    seconds since 0:00 1/1/70 when diagnostics last run
  2684.         (FFFFFFFFh = never)
  2685.  06h    DWORD    MAC status bits
  2686.         bits 0-2: 000 hardware not installed
  2687.               001 hardware failed startup diagnostics
  2688.               010 hardware configuration problem
  2689.               011 hardware fault
  2690.               100 operating marginally due to soft faults
  2691.               101 reserved
  2692.               110 reserved
  2693.               111 hardware fully operational
  2694.         bit 3:      MAC bound
  2695.             4:      MAC open
  2696.             5:      diagnostics in progress
  2697.             6-31: reserved
  2698.  0Ah    WORD    current packet filter flags
  2699.         bit 0: directed/multicast or group/functional
  2700.             1: broadcast
  2701.             2: promiscuous
  2702.             3: all source routing
  2703.             4-15: reserved, must be zero
  2704.  0Ch    DWORD    pointer to media-specific status table or 0000h:0000h
  2705.  10h    DWORD    seconds past 0:00 1/1/70 of last ClearStatistics
  2706.  14h    DWORD    total frames received (FFFFFFFFh = not counted)
  2707.  18h    DWORD    frames with CRC error (FFFFFFFFh = not counted)
  2708.  1Ch    DWORD    total bytes received (FFFFFFFFh = not counted)
  2709.  20h    DWORD    frames discarded--no buffer space (FFFFFFFFh = not counted)
  2710.  24h    DWORD    multicast frames received (FFFFFFFFh = not counted)
  2711.  28h    DWORD    broadcast frames received (FFFFFFFFh = not counted)
  2712.  2Ch    DWORD    frames with errors (FFFFFFFFh = not counted)
  2713.  30h    DWORD    overly large frames (FFFFFFFFh = not counted)
  2714.  34h    DWORD    frames less than minimum size (FFFFFFFFh = not counted)
  2715.  38h    DWORD    multicast bytes received (FFFFFFFFh = not counted)
  2716.  3Ch    DWORD    broadcast bytes received (FFFFFFFFh = not counted)
  2717.  40h    DWORD    frames discarded--hardware error (FFFFFFFFh = not counted)
  2718.  44h    DWORD    total frames transmitted (FFFFFFFFh = not counted)
  2719.  48h    DWORD    total bytes transmitted (FFFFFFFFh = not counted)
  2720.  4Ch    DWORD    multicast frames transmitted (FFFFFFFFh = not counted)
  2721.  50h    DWORD    broadcast frames transmitted (FFFFFFFFh = not counted)
  2722.  54h    DWORD    broadcast bytes transmitted (FFFFFFFFh = not counted)
  2723.  58h    DWORD    multicast bytes transmitted (FFFFFFFFh = not counted)
  2724.  5Ch    DWORD    frames not transmitted--timeout (FFFFFFFFh = not counted)
  2725.  60h    DWORD    frames not transmitted--hardware error (FFFFFFFFh = not countd)
  2726.  64h  N BYTEs    vendor-specific info
  2727. ----------214402-----------------------------
  2728. INT 21 - IBM SYSTEM 36/38 WORKSTATION EMULATION - VDI.SYS - GET ???
  2729.     AX = 4402h
  2730.     BX = handle for character device "GDMS"
  2731.     CX = number of bytes to read (>= 4)
  2732.     DS:DX -> buffer (see below)
  2733. Return: CF set on error
  2734.         AX = error code (see AH=59h)
  2735.     CF clear if successful
  2736.         AX = number of bytes read
  2737.  
  2738. Format of returned data:
  2739. Offset    Size    Description
  2740.  00h  4 BYTEs    ???
  2741.  04h    DWORD    pointer to ???
  2742.  08h  4 BYTEs    ???
  2743. ----------214402-----------------------------
  2744. INT 21 - LASTBYTE.SYS v1.19 - IOCTL - GET ??? TABLE
  2745.     AX = 4402h
  2746.     BX = handle for device "LA$TBYTE"
  2747.     CX = 0004h
  2748.     DS:DX -> DWORD to hold address of 39-byte table of ???
  2749. Return: CF set on error
  2750.         AX = error code (see AH=59h)
  2751.     CF clear if successful
  2752.         AX = number of bytes read
  2753. Note:    LASTBYTE.SYS is part of "The Last Byte" by Key Software Products
  2754. SeeAlso: AX=4402h"HIGHUMM"
  2755. ----------214402-----------------------------
  2756. INT 21 - HIGHUMM.SYS v1.17+ - IOCTL - GET API ADDRESS
  2757.     AX = 4402h
  2758.     BX = handle for device "KSP$UMM"
  2759.     CX = 0004h
  2760.     DS:DX -> DWORD to hold entry point
  2761. Return: CF set on error
  2762.         AX = error code (see AH=59h)
  2763.     CF clear if successful
  2764.         AX = number of bytes read
  2765. Note:    HIGHUMM.SYS is part of "The Last Byte" by Key Software Products
  2766. SeeAlso: AX=4402h"LASTBYTE"
  2767.  
  2768. Call HIGHUMM.SYS entry point with:
  2769.     AH = 00h allocate UMB (same as XMS function 10h) (see INT 2F/AX=4310h)
  2770.         DX = size in paragraphs
  2771.         Return: BX = segment number (if successful)
  2772.             DX = size of requested block/size of largest block
  2773.     AH = 01h deallocate UMB (same as XMS func 11h) (see INT 2F/AX=4310h)
  2774.         DX = segment number of UMB
  2775.     AH = 02h request a bank-switched memory block
  2776.         DX = size in paragraphs
  2777.         Return: BX = segment number (if successful)
  2778.             DX = size of requested block/size of largest block
  2779.     AH = 03h release a bank-switched memory block
  2780.         DX = segment number
  2781.     AH = 04h transfer data to/from high memory
  2782.         DS:SI -> source
  2783.         ES:DI -> destination
  2784.         CX = length in bytes
  2785.         Note: enables bank-switched memory, does the copy, then disables
  2786.         bank-switched memory
  2787.     AH = 05h get a word from bank-switched memory
  2788.         ES:DI -> word to read
  2789.         Return: DX = word
  2790.     AH = 06h put a word to bank-switched memory
  2791.         ES:DI -> word to write
  2792.         DX = word
  2793.     AH = 07h put a byte to bank-switched memory
  2794.         ES:DI -> byte to write
  2795.         DL = byte
  2796.     AH = 08h enable bank-switched memory
  2797.         DS:SI -> 6-byte status save area
  2798.     AH = 09h disable bank-switched memory
  2799.         DS:SI -> 6-byte save area from enable call (AH=08h)
  2800.     AH = 0Ah assign name to UMB or high bank-switched block
  2801.         DX = segment number
  2802.         DS:SI -> 8-byte blank-padded name
  2803.     AH = 0Bh locate UMB block by name
  2804.         DS:SI -> 8-byte blank-padded name
  2805.         Return: BX = segment number (if successful)
  2806.             DX = size of block
  2807.     AH = 0Ch locate bank-switched block by name
  2808.         DS:SI -> 8-byte blank-padded name
  2809.         Return: BX = segment number (if successful)
  2810.             DX = size of block
  2811. Return: AX = status code
  2812.         0001h successful
  2813.         0000h failed
  2814.         BL = error code
  2815.             80h not implemented
  2816.             B0h insufficient memory, smaller block available
  2817.             B1h insufficient memory, no blocks available
  2818.             B2h invalid segment number
  2819. Note:    only functions 00h and 01h are always available; the remaining
  2820.       functions are only enabled if the proper commandline switch is given
  2821. ----------214402-----------------------------
  2822. INT 21 - SMARTDRV.SYS - IOCTL - GET CACHE STATUS
  2823.     AX = 4402h
  2824.     BX = file handle for device "SMARTAAR"
  2825.     CX = number of bytes to read (min 28h)
  2826.     DS:DX -> buffer for status record (see below)
  2827. Return: CF clear if successful
  2828.         AX = number of bytes actually read
  2829.     CF set on error
  2830.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2831. SeeAlso: AX=4403h"SMARTDRV"
  2832.  
  2833. Format of SMARTDRV status record:
  2834. Offset    Size    Description
  2835.  00h    BYTE    write-through flag (always 01h)
  2836.  01h    BYTE    writes should be buffered (always 00h)
  2837.  02h    BYTE    cache enabled if 01h
  2838.  03h    BYTE    driver type (01h extended memory, 02h expanded)
  2839.  04h    WORD    clock ticks between cache flushes (currently unused)
  2840.  06h    BYTE    cache contains locked tracks if nonzero
  2841.  07h    BYTE    flush cache on INT 19 reboot if nonzero
  2842.  08h    BYTE    cache full track writes if nonzero
  2843.  09h    BYTE    double buffering (for VDS) state (00h off, 01h on, 02h dynamic)
  2844.  0Ah    DWORD    original INT 13 vector
  2845.  0Eh    BYTE    minor version number
  2846.  0Fh    BYTE    major version number
  2847.  10h    WORD    unused
  2848.  12h    WORD    sectors read            \
  2849.  14h    WORD    sectors already in cache     > may be scaled rather than
  2850.  16h    WORD    sectors already in track buffer /  absolute counts
  2851.  18h    BYTE    cache hit rate in percent
  2852.  19h    BYTE    track buffer hit rate in percent
  2853.  1Ah    WORD    total tracks in cache
  2854.  1Ch    WORD    number of tracks in use
  2855.  1Eh    WORD    number of locked tracks
  2856.  20h    WORD    number of dirty tracks
  2857.  22h    WORD    current cache size in 16K pages
  2858.  24h    WORD    original (maximum) cache size in 16K pages
  2859.  26h    WORD    minimum cache size in 16K pages
  2860.  28h    DWORD    pointer to byte flag to increment for locking cache contents
  2861. ----------214402-----------------------------
  2862. INT 21 - CD-ROM device driver - IOCTL INPUT
  2863.     AX = 4402h
  2864.     BX = file handle referencing character device for CD-ROM driver
  2865.     CX = number of bytes to read
  2866.     DS:DX -> control block (see below)
  2867. Return: CF clear if successful
  2868.         AX = number of bytes actually read
  2869.     CF set on error
  2870.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2871. Note:    the data returned depends on the first byte of the control block; the
  2872.       remainder of the control block is filled by the driver
  2873. SeeAlso: AX=4403h"CD-ROM",INT 2F/AX=0802h
  2874.  
  2875. Format of control block:
  2876. Offset    Size    Description
  2877.  00h    BYTE    data being requested
  2878.         00h device driver header address
  2879.         01h drive head location
  2880.         02h reserved
  2881.         03h error statistics
  2882.         04h audio channel info
  2883.         05h raw drive bytes (uninterpreted and device-specific)
  2884.         06h device status
  2885.         07h sector size
  2886.         08h volume size
  2887.         09h media change status
  2888.         0Ah audio disk info
  2889.         0Bh audio track info
  2890.         0Ch audio Q-Channel info
  2891.         0Dh audio sub-channel info
  2892.         0Eh UPC code
  2893. ---function 00h---
  2894.  01h    DWORD    device driver header address (see also AH=52h)
  2895. ---function 01h---
  2896.  01h    BYTE    addressing mode
  2897.         00h HSG
  2898.         01h Red Book
  2899.  02h    DWORD    current location of drive's head
  2900.         logical sector number in HSG mode
  2901.         frame/second/minute/unused in Red Book mode
  2902.         (HSG sector = minute * 4500 + second * 75 + frame - 150)
  2903. ---function 03h---
  2904.  01h  N BYTEs    undefined as of 5 Aug 88 specification
  2905. ---function 04h---
  2906.  01h    BYTE    input channel (0-3) for output channel 0
  2907.  02h    BYTE    volume for output channel 0
  2908.  03h    BYTE    input channel (0-3) for output channel 1
  2909.  04h    BYTE    volume for output channel 1
  2910.  05h    BYTE    input channel (0-3) for output channel 2
  2911.  06h    BYTE    volume for output channel 2
  2912.  07h    BYTE    input channel (0-3) for output channel 3
  2913.  08h    BYTE    volume for output channel 3
  2914. Notes:    output channels 0 and 1 are left and right, 2 and 3 are left prime and
  2915.       right prime; a volume of 00h is off
  2916.     the default setting is for each input channel to be assigned to the
  2917.       same-numbered output channel at full (FFh) volume
  2918. ---function 05h---
  2919.  01h    BYTE    number of bytes read
  2920.  02h 128 BYTEs    buffer for drive bytes
  2921. ---function 06h---
  2922.  01h    DWORD    device parameters
  2923.         bit 0: door open
  2924.             1: door unlocked
  2925.             2: supports raw reading in addition to cooked
  2926.             3: writable
  2927.             4: can play audio/video tracks
  2928.             5: supports interleaving
  2929.             6: reserved
  2930.             7: supports prefetch requests
  2931.             8: supports audio channel control
  2932.             9: supports Red Book addressing in addition to HSG
  2933.            10: audio is playing
  2934. ---function 07h---
  2935.  01h    BYTE    read mode
  2936.         00h cooked
  2937.         01h raw
  2938.  02h    WORD    sector size in bytes
  2939. ---function 08h---
  2940.  01h    DWORD    volume size in sectors
  2941. ---function 09h---
  2942.  01h    BYTE    media change status
  2943.         00h don't know
  2944.         01h media unchanged
  2945.         FFh media has been changed
  2946. ---function 0Ah---
  2947.  01h    BYTE    lowest audio track number
  2948.  02h    BYTE    highest audio track number
  2949.  03h    DWORD    start address of lead-out track (Red Book format)
  2950. --function 0Bh---
  2951.  01h    BYTE    track number (set by caller)
  2952.  02h    DWORD    starting point of track (Red Book format)
  2953.  06h    BYTE    track control info
  2954.         bits 15,14,12: track type (notice: bits not contiguous!)
  2955.             000 two audio channels, no pre-emphasis
  2956.             001 two audio channels with pre-emphasis
  2957.             010 data track
  2958.             100 four audio channels, no pre-emphasis
  2959.             101 four audio channels with pre-emphasis
  2960.             other reserved
  2961.         bit 13: digital copy permitted
  2962. ---function 0Ch---
  2963.  01h    BYTE    CONTROL and ADR byte (as received from drive)
  2964.  02h    BYTE    track number
  2965.  03h    BYTE    point or index
  2966.  04h    BYTE    minute    \
  2967.  05h    BYTE    second     > running time within track
  2968.  06h    BYTE    frame    /
  2969.  07h    BYTE    zero
  2970.  08h    BYTE    "AMIN" or "PMIN"     \
  2971.  09h    BYTE    "ASEC" or "PSEC"      > running time on disk
  2972.  0Ah    BYTE    "AFRAME" or "PFRAME" /
  2973. ---function 0Dh---
  2974.  01h    DWORD    starting frame address (Red Book format)
  2975.  05h    DWORD    transfer address
  2976.  09h    DWORD    number of sectors to read
  2977. Note:    copies 96 bytes of sub-channel info per sector into buffer
  2978. ---function 0Eh---
  2979.  01h    BYTE    CONTROL and ADR byte
  2980.  02h  7 BYTEs    UPC/EAN code (13 BCD digits,low-order nybble of last byte is 0)
  2981.  09h    BYTE    zero
  2982.  0Ah    BYTE    "AFRAME"
  2983. ----------214402-----------------------------
  2984. INT 21 - QEMM-386 v5+ - IOCTL INPUT - GET API ENTRY POINT
  2985.     AX = 4402h
  2986.     BX = file handle for device "QEMM386$"
  2987.     CX = 0004h
  2988.     DS:DX -> DWORD buffer for API entry point
  2989. Return: CF clear if successful
  2990.         buffer filled (see INT 67/AH=3Fh for entry point parameters)
  2991.     CF set on error
  2992.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2993. SeeAlso: AX=4402h"HOOKROM",INT 2F/AX=D201h/BX=5145h,INT 67/AH=3Fh
  2994. ----------214402-----------------------------
  2995. INT 21 - Quarterdeck HOOKROM.SYS - IOCTL INPUT - GET HOOKED VECTOR TABLE
  2996.     AX = 4402h
  2997.     BX = file handle for device "HOOKROM$"
  2998.     CX = 0004h
  2999.     DS:DX -> DWORD buffer for address of hooked vector table (see below)
  3000. Return: CF clear if successful
  3001.         DS:DX buffer filled
  3002.     CF set on error
  3003.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  3004. SeeAlso: AX=4402h"QEMM"
  3005.  
  3006. Format of hooked vector table entry:
  3007. Offset    Size    Description
  3008.  00h  5 BYTEs    FAR jump to actual interrupt handler
  3009.          (end of table if first byte is not EAh)
  3010.  05h    BYTE    interrupt vector number
  3011. ----------214402-----------------------------
  3012. INT 21 - Advanced SCSI Programming Interface (ASPI) - INTERFACE
  3013.     AX = 4402h
  3014.     BX = file handle for device "SCSIMGR$"
  3015.     CX = 0004h
  3016.     DS:DX -> buffer for function address
  3017. Return: CF clear if successful
  3018.         AX = 0004h
  3019.     CF set on error
  3020.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  3021. Note:    the function address is called with the address of a SCSI Request
  3022.       Block on the stack and the caller must clean up the stack
  3023. SeeAlso: AX=440Ch"ASPITAPE"
  3024.  
  3025. Format of SCSI Request Block (64 bytes):
  3026. Offset    Size    Description
  3027.  00h    BYTE    request command
  3028.         00h "HA_INQ" - host adapter inquiry
  3029.         01h "GET_TYPE" - get device type
  3030.         02h "EXEC_SIO" - execute SCSI I/O
  3031.         03h "ABORT_SRB" - abort SRB
  3032.         04h "RESET_DEV" - reset SCSI device
  3033.         05h "SET_HAPRMS" - set host adapter parameters
  3034.  01h    BYTE    request status
  3035.         00h not done yet
  3036.         else status
  3037.  02h    BYTE    host adapter ID
  3038.  03h    BYTE    request flags
  3039.  04h    DWORD    reserved
  3040.  08h    BYTE    target ID
  3041.  09h    BYTE    logical unit number
  3042.  0Ah    DWORD    data allocation length
  3043.  0Eh    BYTE    sense allocation length
  3044.  0Fh    DWORD    data buffer pointer
  3045.  13h    DWORD    next request pointer (for linking)
  3046.  17h    BYTE    CDB length
  3047.  18h    BYTE    host adapter status
  3048.  19h    BYTE    target status
  3049.  1Ah    DWORD    post routine address
  3050.  1Eh    WORD    real mode Post DS
  3051.  20h    DWORD    SRB pointer
  3052.  24h    WORD    reserved
  3053.  26h    DWORD    SRB physical address
  3054.  2Ah 22 BYTES    SCSIMGR$ workspace
  3055. ----------214403-----------------------------
  3056. INT 21 - DOS 2+ - IOCTL - WRITE TO CHARACTER DEVICE CONTROL CHANNEL
  3057.     AX = 4403h
  3058.     BX = file handle referencing character device
  3059.     CX = number of bytes to write
  3060.     DS:DX -> data to write
  3061. Return: CF clear if successful
  3062.         AX = number of bytes actually written
  3063.     CF set on error
  3064.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  3065. Notes:    format of data is driver-specific (see below for some specific cases)
  3066.     if the file handle refers to "4DOSSTAK", the 4DOS (v2.x-3.03)
  3067.       KEYSTACK.SYS driver will push the specified characters on the
  3068.       keyboard stack; similarly for "NDOSSTAK", the NDOS KEYSTACK.SYS
  3069.       driver will push the characters onto the keyboard stack
  3070. SeeAlso: AX=4400h,AX=4402h,AX=4405h,INT 2F/AX=122Bh,INT 2F/AX=D44Dh
  3071. SeeAlso: INT 2F/AX=D44Fh
  3072. ----------214403-----------------------------
  3073. INT 21 - SMARTDRV.SYS - IOCTL - CACHE CONTROL
  3074.     AX = 4403h
  3075.     BX = handle for device "SMARTAAR"
  3076.     CX = number of bytes to write
  3077.     DS:DX -> SMARTDRV control block (see below)
  3078. Return: CF clear if successful
  3079.         AX = number of bytes actually written
  3080.            = 0000h if control block too small for given command
  3081.     CF set on error
  3082.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  3083. SeeAlso: AX=4402h"SMARTDRV"
  3084.  
  3085. Format of SMARTDRV control block:
  3086. Offset    Size    Description
  3087.  00h    BYTE    function code
  3088.         00h flush cache
  3089.         01h flush and discard cache
  3090.         02h disable caching (flushes and discards cache first)
  3091.         03h enable caching
  3092.         04h control write caching
  3093.         05h set flushing tick count
  3094.         06h lock cache contents
  3095.         07h unlock cache contents
  3096.         08h set flush-on-reboot flag
  3097.         09h unused
  3098.         0Ah control full-track caching
  3099.         0Bh reduce cache size
  3100.         0Ch increase cache size
  3101.         0Dh set INT 13 chain address
  3102. ---function 04h---
  3103.  01h    BYTE    write caching control action
  3104.         00h turn off write-through
  3105.         01h turn on write-through
  3106.         02h turn off write buffering (also flushes cache)
  3107.         03h turn on write buffering (also flushes cache)
  3108. ---function 05h---
  3109.  01h    WORD    number of timer ticks between cache flushes
  3110. ---function 08h---
  3111.  01h    BYTE    new flush-on-reboot flag (00h off, 01h on)
  3112. ---function 0Ah---
  3113.  01h    BYTE    full-track writes are
  3114.         00h not cached
  3115.         01h cached
  3116. ---functions 0Bh,0Ch---
  3117.  01h    WORD    number of 16K pages by which to increase/reduce cache size
  3118. ---function 0Dh---
  3119.  01h    DWORD    new address to which to chain on INT 13
  3120. Note:    the previous address is not preserved
  3121. ----------214403-----------------------------
  3122. INT 21 - CD-ROM device driver - IOCTL OUTPUT
  3123.     AX = 4403h
  3124.     BX = file handle referencing character device for CD-ROM driver
  3125.     CX = number of bytes to write
  3126.     DS:DX -> control block (see below)
  3127. Return: CF clear if successful
  3128.         AX = number of bytes actually written
  3129.     CF set on error
  3130.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  3131. SeeAlso: AX=4402h"CD-ROM",INT 2F/AX=0802h
  3132.  
  3133. Format of control block:
  3134. Offset    Size    Description
  3135.  00h    BYTE    function code
  3136.         00h eject disk
  3137.         01h lock/unlock door
  3138.         02h reset drive
  3139.         03h control audio channel
  3140.         04h write device control string
  3141.         05h close tray
  3142. ---functions 00h,02h,05h---
  3143.  no further fields
  3144. ---function 01h---
  3145.  01h    BYTE    lock function
  3146.         00h unlock door
  3147.         01h lock door
  3148. ---function 03h---
  3149.  01h    BYTE    input channel (0-3) for output channel 0
  3150.  02h    BYTE    volume for output channel 0
  3151.  03h    BYTE    input channel (0-3) for output channel 1
  3152.  04h    BYTE    volume for output channel 1
  3153.  05h    BYTE    input channel (0-3) for output channel 2
  3154.  06h    BYTE    volume for output channel 2
  3155.  07h    BYTE    input channel (0-3) for output channel 3
  3156.  08h    BYTE    volume for output channel 3
  3157. Note:    output channels 0 and 1 are left and right, 2 and 3 are left prime and
  3158.       right prime; a volume of 00h is off
  3159. ---function 04h---
  3160.  01h  N BYTEs    bytes to send directly to the CD-ROM drive without
  3161.         interpretation
  3162. ----------214403-----------------------------
  3163. INT 21 - Brian Antoine Seagate ST-01 SCSI.SYS - IOCTL - EXECUTE COMMANDS
  3164.     AX = 4403h
  3165.     BX = handle for device "SCSITAPE"
  3166.     CX = number of bytes to write
  3167.     DS:DX -> SCSITAPE control block (see below)
  3168. Return: CF clear if successful
  3169.         AX = number of bytes actually written
  3170.     CF set on error
  3171.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  3172. SeeAlso: AX=4405h"ST-01",INT 78/AH=10h
  3173.  
  3174. Format of SCSITAPE control block:
  3175. Offset    Size    Description
  3176.  00h    WORD    command type
  3177.         'F' Format (argument 1 = interleave, argument 2 = format type)
  3178.         'E' Erase
  3179.         'R' Rewind
  3180.         'L' Load
  3181.         'N' No Load
  3182.         'S' Space (argument 1 = count, argument 2 = type)
  3183.         'M' File Mark (argument 1 = count)
  3184.         'A' Reassign 
  3185.  02h    WORD    argument 1
  3186.  04h    WORD    argument 2
  3187.  06h    WORD    segment of command buffer
  3188.  08h    WORD    offset of command buffer
  3189.  0Ah    WORD    length of command buffer
  3190. ----------214404-----------------------------
  3191. INT 21 - DOS 2+ - IOCTL - READ FROM BLOCK DEVICE CONTROL CHANNEL
  3192.     AX = 4404h
  3193.     BL = drive number (00h = default, 01h = A:, etc)
  3194.     CX = number of bytes to read
  3195.     DS:DX -> buffer
  3196. Return: CF clear if successful
  3197.         AX = number of bytes actually read
  3198.     CF set on error
  3199.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  3200. Note:    format of data is driver-specific
  3201. SeeAlso: AX=4402h,AX=4405h,INT 2F/AX=122Bh
  3202. ----------214404-----------------------------
  3203. INT 21 - Stacker - GET DEVICE DRIVER ADDRESS AND SET VOLUME NUMBER
  3204.     AX = 4404h
  3205.     BL = drive number (00h = default, 01h = A:, etc)
  3206.     CX = 0004h
  3207.     DS:DX -> DWORD buffer to receive device driver address
  3208. Note:    In addition to returning the address of the Stacker device driver,
  3209.       this call also sets the volume number at offset 3Eh in the device
  3210.       driver (see INT 25/AX=CDCDh)
  3211. SeeAlso: INT 25/AX=CDCDh
  3212. ----------214404-----------------------------
  3213. INT 21 - Stacker - GET STACVOL FILE SECTORS
  3214.     AX = 4404h
  3215.     BL = drive number (0 is current drive)
  3216.     CX = byte count (i.e., 200h = 1 sector)
  3217.     DS:DX -> buffer (see below)
  3218. Return:    Data Buffer contains the number of sectors requested from the
  3219.       STACVOL physical file for the drive specified.
  3220.  
  3221. Format of stacker buffer:
  3222. Offset    Size    Description
  3223.  00h    WORD    01CDh
  3224.  02h    WORD    sector count
  3225.  04h    DWORD    number of starting sector
  3226.  08h    DWORD    far pointer to Data Buffer
  3227. ----------214405-----------------------------
  3228. INT 21 - DOS 2+ - IOCTL - WRITE TO BLOCK DEVICE CONTROL CHANNEL
  3229.     AX = 4405h
  3230.     BL = drive number (00h = default, 01h = A:, etc)
  3231.     CX = number of bytes to write
  3232.     DS:DX -> data to write
  3233. Return: CF clear if successful
  3234.         AX = number of bytes actually written
  3235.     CF set on error
  3236.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  3237. Note:    format of data is driver-specific
  3238. SeeAlso: AX=4403h,AX=4404h,INT 2F/AX=122Bh
  3239. ----------214405-----------------------------
  3240. INT 21 - Brian Antoine Seagate ST-01 SCSI.SYS - IOCTL - EXECUTE COMMANDS
  3241.     AX = 4405h
  3242.     BX = drive number (00h = default, 01h = A:, etc)
  3243.     CX = number of bytes to write
  3244.     DS:DX -> SCSIDISK control block (see AX=4403h"ST-01")
  3245. Return: CF clear if successful
  3246.         AX = number of bytes actually written
  3247.     CF set on error
  3248.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  3249. SeeAlso: AX=4403h"ST-01"
  3250. ----------214406-----------------------------
  3251. INT 21 - DOS 2+ - IOCTL - GET INPUT STATUS
  3252.     AX = 4406h
  3253.     BX = file handle
  3254. Return: CF clear if successful
  3255.         AL = input status
  3256.         00h not ready (device) or at EOF (file)
  3257.         FFh ready
  3258.     CF set on error
  3259.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  3260. Note:    files may not register as being at EOF if positioned there by AH=42h
  3261. SeeAlso: AX=4407h,INT 2F/AX=122Bh
  3262. ----------214407-----------------------------
  3263. INT 21 - DOS 2+ - IOCTL - GET OUTPUT STATUS
  3264.     AX = 4407h
  3265.     BX = file handle
  3266. Return: CF clear if successful
  3267.         AL = input status
  3268.         00h not ready
  3269.         FFh ready
  3270.     CF set on error
  3271.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  3272. Note:    for DOS 2+, files are always ready for output, even if the disk is
  3273.       full or no media is in the drive
  3274. SeeAlso: AX=4406h,INT 2F/AX=122Bh
  3275. ----------214408-----------------------------
  3276. INT 21 - DOS 3.0+ - IOCTL - CHECK IF BLOCK DEVICE REMOVABLE
  3277.     AX = 4408h
  3278.     BL = drive number (00h = default, 01h = A:, etc)
  3279. Return: CF clear if successful
  3280.         AX = 0000h if removable
  3281.            = 0001h if fixed
  3282.     CF set on error
  3283.         AX = error code (01h,0Fh) (see AH=59h)
  3284. SeeAlso: AX=4400h,AX=4409h,INT 2F/AX=122Bh
  3285. ----------214409-----------------------------
  3286. INT 21 - DOS 3.1+ - IOCTL - CHECK IF BLOCK DEVICE REMOTE
  3287.     AX = 4409h
  3288.     BL = drive number (00h = default, 01h = A:, etc)
  3289. Return: CF clear if successful
  3290.         DX = device attribute word
  3291.         bit 15: drive is SUBSTituted
  3292.         bit 12: drive is remote
  3293.         bit  9: direct I/O not allowed
  3294.     CF set on error
  3295.         AX = error code (01h,0Fh) (see AH=59h)
  3296. Note:    on local drives, DX bits not listed above are the attribute word from
  3297.       the device driver header (see AH=52h); for remote drives, the other
  3298.       bits appear to be undefined
  3299. SeeAlso: AX=4400h,AX=4408h,AX=440Ah,INT 2F/AX=122Bh
  3300. ----------21440A-----------------------------
  3301. INT 21 - DOS 3.1+ - IOCTL - CHECK IF HANDLE IS REMOTE
  3302.     AX = 440Ah
  3303.     BX = handle
  3304. Return: CF clear if successful
  3305.         DX = attribute word (as stored in SFT)
  3306.         bit 15: set if remote
  3307.         bit 14: date/time not set on close
  3308.     CF set on error
  3309.         AX = error code (01h,06h) (see AH=59h)
  3310. Note:    if file is remote, Novell Advanced NetWare 2.0 returns the number of
  3311.       the file server on which the handle is located in CX
  3312. SeeAlso: AX=4400h,AX=4409h,AH=52h,INT 2F/AX=122Bh
  3313. ----------21440B-----------------------------
  3314. INT 21 - DOS 3.1+ - IOCTL - SET SHARING RETRY COUNT
  3315.     AX = 440Bh
  3316.     CX = pause between retries (default 1)
  3317.     DX = number of retries (default 3)
  3318. Return: CF clear if successful
  3319.     CF set on error
  3320.         AX = error code (01h) (see AH=59h)
  3321. Notes:    delay is dependent on processor speed (value in CX specifies number of
  3322.       64K-iteration empty loops to execute)
  3323.     if DX=0000h on entry, the retry count is left unchanged
  3324. SeeAlso: AH=52h,INT 2F/AX=1224h,INT 2F/AX=122Bh
  3325. ----------21440C-----------------------------
  3326. INT 21 - DOS 3.2+ - IOCTL - GENERIC CHARACTER DEVICE REQUEST
  3327.     AX = 440Ch
  3328.     BX = device handle
  3329.     CH = category code
  3330.         00h unknown (DOS 3.3+)
  3331.         01h COMn: (DOS 3.3+)
  3332.         03h CON (DOS 3.3+)
  3333.         05h LPTn:
  3334.         9Eh Media Access Control driver (STARLITE)
  3335.     CL = function
  3336.         00h MAC driver Bind (STARLITE)
  3337.         45h set iteration count
  3338.         4Ah select code page
  3339.         4Ch start code-page preparation
  3340.         4Dh end code-page preparation
  3341.         5Fh set display information (DOS 4.0)
  3342.         65h get iteration count
  3343.         6Ah query selected code page
  3344.         6Bh query prepare list
  3345.         7Fh get display information (DOS 4.0)
  3346.     DS:DX -> (DOS) parameter block (see below)
  3347.     SI:DI -> (OS/2 comp box) parameter block (see below)
  3348. Return: CF set on error
  3349.         AX = error code (see AH=59h)
  3350.     CF clear if successful
  3351.         DS:DX -> iteration count if CL=65h
  3352.     DS:DX -> (OS/2 comp box) data block
  3353. SeeAlso: AX=440Dh,INT 2F/AX=0802h,INT 2F/AX=122Bh,INT 2F/AX=1A01h
  3354.  
  3355. Format of parameter block for function 00h:
  3356. Offset    Size    Description
  3357.  00h  8 BYTEs    ASCIZ signature "STARMAC"
  3358.  08h    WORD    version
  3359.  0Ah    WORD    flags
  3360.         bit 0: media requires connect or listen request before use
  3361.         bit 1: network is a LAN (broadcast/multicast supported)
  3362.         bit 2: point-to-point network
  3363.  0Ch    WORD    handle for use with MAC driver's private interface (filled in
  3364.         by MAC driver)
  3365.  0Eh    WORD    context
  3366.  10h    WORD    approximate speed in KB/sec (filled in by MAC driver)
  3367.  12h    WORD    approximate cost in cents per hour (filled in by MAC driver)
  3368.  14h    WORD    maximum packet size in bytes (filled in by MAC driver)
  3369.  16h    WORD    addressing format (filled in by MAC driver)
  3370.         0000h general addressing
  3371.         0001h Ethernet addressing
  3372.         0002h Token Ring addressing
  3373.         0003h Token Bus addressing
  3374.  18h    DWORD    Send entry point (filled in by MAC driver)
  3375.  1Ch    DWORD    RegisterEventHandler entry point (filled in by MAC driver)
  3376.  20h    DWORD    SetPacketFilter entry point (filled in by MAC driver)
  3377.  24h    DWORD    UnBind entry point (filled in by MAC driver)
  3378.  
  3379. Format of parameter block for function 45h:
  3380. Offset    Size    Description
  3381.  00h    WORD    number of times output is attempted before driver assumes
  3382.         device is busy
  3383.  
  3384. Format of parameter block for functions 4Ah and 6Ah:
  3385. Offset    Size    Description
  3386.  00h    WORD    length of data
  3387.  02h    WORD    code page ID
  3388.  04h 2N BYTEs    DCBS (double byte character set) lead byte range
  3389.           start/end for each of N ranges (DOS 4.0)
  3390.     WORD    0000h  end of data (DOS 4.0)
  3391.  
  3392. Format of parameter block for function 4Dh:
  3393. Offset    Size    Description
  3394.  00h    WORD    length of data
  3395.  02h    WORD    code page ID
  3396.  
  3397. Format of parameter block for function 4Ch:
  3398. Offset    Size    Description
  3399.  00h    WORD    flags
  3400.         DISPLAY.SYS = 0000h
  3401.         PRINTER.SYS bit 0 clear to prepare downloaded font, set to
  3402.             prepare cartridge selection
  3403.  02h    WORD    length of remainder of parameter block
  3404.  04h    WORD    number of code pages following
  3405.  06h  N WORDs    code page 1,...,N
  3406.  
  3407. Format of parameter block for functions 5Fh and 7Fh:
  3408. Offset    Size    Description
  3409.  00h    BYTE    level (0 for DOS 4.x and 5.0)
  3410.  01h    BYTE    reserved (0)
  3411.  02h    WORD    length of following data (14)
  3412.  04h    WORD    control flags
  3413.           bit 0 set for blink, clear for intensity
  3414.           bits 1 to 15 reserved
  3415.  06h    BYTE    mode type (1=text, 2=graphics)
  3416.  07h    BYTE    reserved (0)
  3417.  08h    WORD    colors
  3418.            0 = monochrome
  3419.            else N bits per pixel
  3420.  0Ah    WORD    pixel columns
  3421.  0Ch    WORD    pixel rows
  3422.  0Eh    WORD    character columns
  3423.  10h    WORD    character rows
  3424.  
  3425. Format of parameter block for function 6Bh:
  3426. Offset    Size    Description
  3427.  00h    WORD    length of following data
  3428.  02h    WORD    number of hardware code pages
  3429.  04h  N WORDs    hardware code pages 1,...,N
  3430.     WORD    number of prepared code pages
  3431.       N WORDs    prepared code pages 1,...,N
  3432. ----------21440C-----------------------------
  3433. INT 21 - Greg Shenaut ASPITAPE.SYS - INTERFACE
  3434.     AX = 440Ch
  3435.     BX = device handle
  3436.     CH = category code
  3437.         07h tape (ASPITAPE.SYS)
  3438.     CL = function
  3439.         01h "mtop" - perform tape operation
  3440.         02h "mtget" - get tape status
  3441.         03h ignore end-of-tape errors
  3442.         04h enable end-of-tape errors
  3443.     DS:DX -> parameter block (see below)
  3444. Return: CF set on error
  3445.         AX = error code (see AH=59h)
  3446.     CF clear if successful
  3447.         DS:DX -> data block
  3448. Notes:    This device driver is a simple DOS interface to the Adaptec Advanced
  3449.       SCSI Programming Interface (ASPI).  It provides the following device
  3450.       names as access to the SCSI tape, 'RMTx' (rewind on close) and
  3451.       'NRMTx' (NO rewind on close) where x can go from 0 to 3.  There may
  3452.       also be the following names 'MTx' and 'NMTx' which default to 1024
  3453.       byte blocks.    The names may also have a '$' appended to try and make
  3454.       them unique from file names of 'RMT0' etc.
  3455.     once opend these devices must be put into RAW mode
  3456. SeeAlso: AX=4402h"ASPI"
  3457.  
  3458. Format of mtop parameter block:
  3459. Offset    Size    Description
  3460.  00h    WORD    operation code
  3461.         00h "MTWEOF" - write an end-of-file record
  3462.         01h "MTFSF" - forward space file
  3463.         02h "MTBSF" - backward space file
  3464.         03h "MTFSR" - forward space record
  3465.         04h "MTBSR" - backward space record
  3466.         05h "MTREW" - rewind
  3467.         06h "MTOFFL" - rewind and unload
  3468.         07h "MTNOP" - perform TEST UNIT READY
  3469.  02h    DWORD    repetition count
  3470.  
  3471. Format of mtget parameter block:
  3472. Offset    Size    Description
  3473.  00h    BYTE    ASPI host ID
  3474.  01h    BYTE    SCSI target ID
  3475.  02h    BYTE    SCSI logical unit number
  3476.  03h    BYTE    device parameters
  3477.         bit 0: drive must use fixed-block read and write
  3478.         bit 7: drive is an ASPI device
  3479.  04h    BYTE    current device state
  3480.         bit 0: device currently opened in buffered mode
  3481.         bit 1: drive currently opened in nonbuffered mode
  3482.         bit 2: rewind drive on last close
  3483.         bit 3: drive has been written on
  3484.         bit 4: drive has been read from
  3485.         bit 5: next read will return 0 bytes
  3486.         bit 6: EOM will resemble EOF
  3487.         bit 7: drive may be busy rewinding
  3488.  05h    BYTE    unit number within driver
  3489.  06h    WORD    fixed block blocksize
  3490.  08h    BYTE    last SCSI status
  3491.  09h    BYTE    last SCSI sense key
  3492.  0Ah    WORD    last SCSI opcode (packed)
  3493.         bits 0-7: SCSI operation (SCSI packet byte 0)
  3494.         bits 8-10: SCSI flags (SCSI packet byte 1)
  3495.         bits 11-12: ASPI "Direction Bits" (ASPI SRB byte 3)
  3496.  0Ch    WORD    residual bytes from SCSI opcode
  3497. ----------21440D-----------------------------
  3498. INT 21 - DOS 3.2+ - IOCTL - GENERIC BLOCK DEVICE REQUEST
  3499.     AX = 440Dh
  3500.     BL = drive number (00h=default,01h=A:,etc)
  3501.     CH = category code
  3502.         08h disk drive
  3503.     CL = function
  3504.         40h set device parameters
  3505.         41h write logical device track
  3506.         42h format and verify logical device track
  3507.         46h (DOS 4+) set volume serial number (see also AH=69h)
  3508.         47h (DOS 4+) set access flag
  3509.         60h get device parameters
  3510.         61h read logical device track
  3511.         62h verify logical device track
  3512.         66h (DOS 4+) get volume serial number (see also AH=69h)
  3513.         67h (DOS 4+) get access flag
  3514.         68h (DOS 5+) sense media type
  3515.     DS:DX -> (DOS) parameter block (see below)
  3516.     SI:DI -> (OS/2 comp box) parameter block (see below)
  3517. Return: CF set on error
  3518.         AX = error code (see AH=59h)
  3519.     CF clear if successful
  3520.         DS:DX -> data block if CL=60h or CL=61h
  3521. Notes:    DOS 4.01 seems to ignore the high byte of the number of directory
  3522.       entries in the BPB for diskettes.
  3523.     functions 46h and 66h undocumented in DOS 4.x, documented for DOS 5.0
  3524. SeeAlso: AX=440Ch,AH=69h,INT 2F/AX=0802h,INT 2F/AX=122Bh
  3525.  
  3526. Format of parameter block for functions 40h, 60h:
  3527. Offset    Size    Description
  3528.  00h    BYTE    special functions
  3529.         bit 0 set if function to use current BPB, clear if Device
  3530.             BIOS Parameter Block field contains new default BPB
  3531.         bit 1 set if function to use track layout fields only
  3532.             must be clear if CL=60h
  3533.         bit 2 set if all sectors in track same size (should be set)
  3534.         bits 3-7 reserved
  3535.  01h    BYTE    device type
  3536.         00h  320K/360K disk
  3537.         01h  1.2M disk
  3538.         02h  720K disk
  3539.         03h  single-density 8-inch disk
  3540.         04h  double-density 8-inch disk
  3541.         05h  fixed disk
  3542.         06h  tape drive
  3543.         07h  (DOS 3.3+) 1.44M floppy
  3544.         08h  read/write optical disk
  3545.         09h  (DOS 5.0) 2.88M floppy
  3546.         0Ah  other type of block device
  3547.  02h    WORD    device attributes
  3548.         bit 0 set if nonremovable medium
  3549.         bit 1 set if door lock supported
  3550.         bits 2-15 reserved
  3551.  04h    WORD    number of cylinders
  3552.  06h    BYTE    media type
  3553.         for 1.2M drive
  3554.             00h 1.2M disk (default)
  3555.             01h 320K/360K disk
  3556.         always 00h for other drive types
  3557.  07h 31 BYTEs    device BPB (see AH=53h), bytes after BPB offset 1Eh omitted
  3558.  26h    WORD    number of sectors per track (start of track layout field)
  3559.         not used by function 60h
  3560.  28h  N word pairs: number,size of each sector in track
  3561.  
  3562. Format of parameter block for functions 41h, 61h:
  3563. Offset    Size    Description
  3564.  00h    BYTE    special functions (reserved, must be zero)
  3565.  01h    WORD    number of disk head
  3566.  03h    WORD    number of disk cylinder
  3567.  05h    WORD    number of first sector to read/write
  3568.  07h    WORD    number of sectors
  3569.  09h    DWORD    transfer address
  3570.  
  3571. Format of parameter block for functions 42h, 62h:
  3572. Offset    Size    Description
  3573.  00h    BYTE    reserved, must be zero (DOS <3.2)
  3574.           bit 0=0: format/verify track
  3575.             1: format status call (DOS 3.2+)
  3576.           bits 1-7 reserved, must be zero
  3577.         on return (DOS 4.x):
  3578.           bit 0: set if specified tracks, sectors/track supported
  3579.           bit 1: set if function not supported by BIOS
  3580.           bit 2: set if specified tracks, sectors/track not supported
  3581.           bit 3: set if no disk in drive
  3582.  01h    WORD    number of disk head
  3583.  03h    WORD    number of disk cylinder
  3584.  
  3585. Format of parameter block for functions 46h, 66h:
  3586. Offset    Size    Description
  3587.  00h    WORD    info level (00h)
  3588.  02h    DWORD    disk serial number (binary)
  3589.  06h 11 BYTEs    volume label or "NO NAME    "
  3590.  11h  8 BYTEs    filesystem type "FAT12     " or "FAT16   " (CL=66h only)
  3591.  
  3592. Format of parameter block for functions 47h, 67h:
  3593. Offset    Size    Description
  3594.  00h    BYTE    special-function field (must be zero)
  3595.  01h    BYTE    disk-access flag, nonzero if access allowed by driver
  3596.  
  3597. Format of parameter block for function 68h:
  3598. Offset    Size    Description
  3599.  00h    BYTE    01h for default media type, 00h for any other media type
  3600.  01h    BYTE    02h for 720K, 07h for 1.44M, 09h for 2.88M
  3601. ----------21440E-----------------------------
  3602. INT 21 - DOS 3.2+ - IOCTL - GET LOGICAL DRIVE MAP
  3603.     AX = 440Eh
  3604.     BL = drive number (00h=default,01h=A:,etc)
  3605. Return: CF set on error
  3606.         AX = error code (01h,0Fh) (see AH=59h)
  3607.     CF clear if successful
  3608.         AL = 00h block device has only one logical drive assigned
  3609.          1..26 the last letter used to reference the drive (1=A:,etc)
  3610. SeeAlso: AX=440Fh,INT 2F/AX=122Bh
  3611. ----------21440F-----------------------------
  3612. INT 21 - DOS 3.2+ - IOCTL - SET LOGICAL DRIVE MAP
  3613.     AX = 440Fh
  3614.     BL = physical drive number (00h=default,01h=A:,etc))
  3615. Return: CF set on error
  3616.         AX = error code (01h,0Fh) (see AH=59h)
  3617.     CF clear if successful
  3618.         drive now responds to next logical drive number
  3619. Note:    maps logical drives to physical drives, similar to DOS's treatment of
  3620.       a single physical floppy drive as both A: and B:
  3621. SeeAlso: AX=440Eh,INT 2F/AX=122Bh
  3622. ----------214410-----------------------------
  3623. INT 21 - DOS 5.0 - IOCTL - QUERY GENERIC IOCTL CAPABILITY (HANDLE)
  3624.     AX = 4410h
  3625.     BX = handle for device
  3626.     CH = category code (see AX=440Ch)
  3627.     CL = function code
  3628. Return: CF clear if successful
  3629.         AX = 0000h    specified IOCTL function is supported
  3630.     CF set on error
  3631.         AL = 01h    IOCTL capability not available
  3632. Note:    a program which wishes to use Generic IOCTL calls beyond those in the
  3633.       standard DOS 3.2 set may use this call first to see whether a
  3634.       particular call is supported
  3635. SeeAlso: AX=440Ch,AX=440Dh,AX=4411h
  3636. ----------214410BXFFFF-----------------------
  3637. INT 21 - NewSpace - ENABLE DRIVER
  3638.     AX = 4410h
  3639.     BX = FFFFh
  3640. Notes:    NewSpace is a TSR by Isogon Corporation which automatically compresses
  3641.       all files as they are written and decompresses them as they are read
  3642.     compressed files are not accessible unless the driver is enabled
  3643. SeeAlso: AX=4411h/BX=FFFFh
  3644. ----------214411-----------------------------
  3645. INT 21 - DOS 5.0 - IOCTL - QUERY GENERIC IOCTL CAPABILITY (DRIVE)
  3646.     AX = 4411h
  3647.     BL = drive number
  3648.     CH = category code (see AX=440Dh)
  3649.     CL = function code
  3650. Return: CF clear if successful
  3651.         AX = 0000h    specified IOCTL function is supported
  3652.     CF set on error
  3653.         AL = 01h    IOCTL capability not available
  3654. Note:    a program which wishes to use Generic IOCTL calls beyond those in the
  3655.       standard DOS 3.2 set may use this call first to see whether a
  3656.       particular call is supported
  3657. SeeAlso: AX=440Ch,AX=440Dh,AX=4410h
  3658. ----------214411BXFFFF-----------------------
  3659. INT 21 - NewSpace - DISABLE DRIVER
  3660.     AX = 4411h
  3661.     BX = FFFFh
  3662. Notes:    NewSpace is a TSR by Isogon Corporation which automatically compresses
  3663.       all files as they are written and decompresses them as they are read
  3664.     compressed files are not accessible unless the driver is enabled
  3665. SeeAlso: AX=4410h/BX=FFFFh
  3666. ----------214412-----------------------------
  3667. INT 21 - DR-DOS 5.0 - DETERMINE DOS TYPE
  3668.     AX = 4412h
  3669.     CF set
  3670. Return: CF set if not DR DOS
  3671.         AX = error code (see AH=59h)
  3672.     CF clear if DR DOS
  3673.         DX = AX = version code
  3674.         1060h = ???
  3675.         1063h = DR-DOS 3.41 ???
  3676.         1065h = DR-DOS 5.0
  3677.         1067h = DR-DOS 6.0
  3678. Note:    this call is identical to AX=4452h
  3679. SeeAlso: AX=4452h
  3680. ----------214412BXFFFF-----------------------
  3681. INT 21 - NewSpace - INSTALLATION CHECK???
  3682.     AX = 4412h
  3683.     BX = FFFFh
  3684. Return: AX = PSP segment of NewRes (resident driver for NewSpace)
  3685.     BX:DX -> ???
  3686.     CX = ???
  3687. SeeAlso: AX=4411h/BX=FFFFh
  3688. ----------214413BXFFFF-----------------------
  3689. INT 21 - NewSpace - GET ???
  3690.     AX = 4413h
  3691.     BX = FFFFh
  3692. Return: AX = code segment of NewRes (resident driver for NewSpace)
  3693.     BX = offset of ???
  3694. SeeAlso: AX=4412h/BX=FFFFh
  3695. ----------214414-----------------------------
  3696. INT 21 - DR-DOS 5.0 - SET GLOBAL PASSWORD
  3697.     AX = 4414h
  3698.     DS:DX -> password string (blank-padded to 8 characters)
  3699. Note:    this call is identical to AX=4454h
  3700. SeeAlso: AX=4454h
  3701. ----------214414BXFFFF-----------------------
  3702. INT 21 - NewSpace - DEBUGGING DUMP
  3703.     AX = 4414h
  3704.     BX = FFFFh
  3705. Return:    debugging dump written to X:\NEWSPACE.SMP
  3706. SeeAlso: AX=4413h/BX=FFFFh,AX=44FFh/BX=FFFFh
  3707. ---------------------------------------------
  3708. INT 21 - DR-DOS 5.0
  3709.     AH = 44h
  3710.     AL = 16h to 18h
  3711. Note:    these subfunctions are identical to AX=4456h to 4458h
  3712. SeeAlso: AX=4456h,AX=4457h,AX=4458h
  3713. ----------214451-----------------------------
  3714. INT 21 - Concurrent DOS v3.2+ - INSTALLATION CHECK
  3715.     AX = 4451h
  3716. Return: CF set if not Concurrent DOS
  3717.         AX = error code (see AH=59h)
  3718.     CF clear if successful
  3719.         AH = 14h
  3720.         AL = version (high nybble = major version, low nybble = minor ver)
  3721. SeeAlso: AX=4452h,AX=4459h
  3722. ----------214452-----------------------------
  3723. INT 21 - DR DOS 3.41+ - IOCTL - DETERMINE DOS TYPE/GET DR-DOS VERSION
  3724.     AX = 4452h
  3725.     CF set
  3726. Return: CF set if not DR DOS
  3727.         AX = error code (see AH=59h)
  3728.     CF clear if DR DOS
  3729.         DX = AX = version code
  3730.         1060h = ???
  3731.         1063h = DR-DOS 3.41 ???
  3732.         1065h = DR-DOS 5.0
  3733.         1067h = DR-DOS 6.0
  3734. Notes:    the DR-DOS version is stored in the environment variable VER
  3735. SeeAlso: AX=4412h,AX=4451h,AX=4459h
  3736. ----------214454-----------------------------
  3737. INT 21 - DR-DOS 3.41+ internal - SET GLOBAL PASSWORD
  3738.     AX = 4454h
  3739.     DS:DX -> password string (blank-padded to 8 characters)
  3740. SeeAlso: AX=4303h,AX=4414h
  3741. ----------214456-----------------------------
  3742. INT 21 - DR-DOS 5.0+ internal - ???
  3743.     AX = 4456h
  3744.     DL = flag
  3745.         bit 0: ???
  3746. Return: AL = ???
  3747. Note:    This was seen called by COMMAND.COM of DR-DOS 6.0
  3748. ----------214457-----------------------------
  3749. INT 21 - DR-DOS 5.0+ internal - ???
  3750.     AX = 4457h
  3751.     DH = 00h
  3752.         DL = 00h ???
  3753.            = 01h ???
  3754.            else Return: AX = ???
  3755.        = 01h
  3756.            Return: AX = ???
  3757.        = 02h
  3758.            DL = ???
  3759.         Return: AX = ???
  3760.        = other
  3761.            Return: AX = ???
  3762. Note:    This was seen called by COMMAND.COM of DR-DOS 6.0
  3763. ----------214458-----------------------------
  3764. INT 21 - DR DOS 5.0+ internal - GET POINTER TO TABLE OF ???
  3765.     AX = 4458h
  3766. Return: ES:BX -> internal table (see below)
  3767.     AX = ??? (0B50h for DR-DOS 5.0, 0A56h for DR-DOS 6.0)
  3768. SeeAlso: AX=4452h
  3769.  
  3770. Format of internal table:
  3771. Offset    Size    Description
  3772.  00h    DWORD    pointer to ???
  3773.  04h  7 BYTEs    ???
  3774.  0Bh    WORD    K of extended memory at startup
  3775.  0Dh    BYTE    number of far jump entry points
  3776.  0Eh    WORD    segment containing far jumps to DR-DOS entry points (see below)
  3777.  10h    WORD    ???
  3778.  12h    WORD    pointer to segment of environment variables set in CONFIG,
  3779.         or 0000h if already used (DR-DOS 6.0 only)
  3780.  14h    ???    ???
  3781. Note:    the segment used for the DR-DOS 6.0 CONFIG environment variables
  3782.       (excluding COMSPEC, VER and OS) is only useful for programs/drivers
  3783.       called from CONFIG.SYS. The word is set to zero later and the area
  3784.       lost.
  3785.  
  3786. Format of jump table for DR-DOS 5.0-6.0:
  3787. Offset    Size    Description
  3788.  00h  5 BYTEs    far jump to entry point corresponding to CP/M CALL 5
  3789.  05h  5 BYTEs    far jump to entry point corresponding to INT 20
  3790.  0Ah  5 BYTEs    far jump to entry point corresponding to INT 21
  3791.  0Fh  5 BYTEs    far jump to entry point corresponding to ???
  3792.  14h  5 BYTEs    far jump to entry point corresponding to ???
  3793.  19h  5 BYTEs    far jump to entry point corresponding to ???
  3794.  1Eh  5 BYTEs    far jump to entry point corresponding to ???
  3795.  23h  5 BYTEs    far jump to entry point corresponding to ???
  3796.  28h  5 BYTEs    far jump to entry point corresponding to ???
  3797.  2Dh  5 BYTEs    far jump to entry point corresponding to ???
  3798.  32h  5 BYTEs    far jump to entry point corresponding to ??? (IRET)
  3799.  37h  5 BYTEs    far jump to entry point corresponding to ??? (IRET)
  3800.  3Ch  5 BYTEs    far jump to entry point corresponding to ??? (IRET)
  3801.  41h  5 BYTEs    far jump to entry point corresponding to ??? (IRET)
  3802.  46h  5 BYTEs    far jump to entry point corresponding to ??? (IRET)
  3803.  4Bh  5 BYTEs    far jump to entry point corresponding to ???
  3804. ----------214459-----------------------------
  3805. INT 21 - DR MultiUser DOS 5.0 - API
  3806.     AX = 4459h
  3807.     CL = function (see below)
  3808.     DS,DX = parameters
  3809. SeeAlso: AX=4452h
  3810. Note:    DR-DOS 5.0 returns CF set and AX=0001h
  3811.  
  3812. Values for function number:
  3813.  00h    terminate calling process
  3814.  02h    write character to default console (see AH=02h)
  3815.  03h    read character from default AUX (see AH=03h)
  3816.  05h    write character to default list device (see AH=05h)
  3817.  06h    perform raw I/O on default console
  3818.  07h    return default AUX input status
  3819.  08h    return default AUX output status
  3820.  09h    write string to default console (see AH=09h)
  3821.  0Ah    read string from default console (see AH=0Ah)
  3822.  0Bh    return default console input status (see AH=0Bh)
  3823.  0Ch    get BDOS release ID
  3824.  0Dh    reset all disk drives (see AH=0Dh)
  3825.  0Eh    set default drive (see AH=0Eh)
  3826.  0Fh    open file via FCB (see AH=0Fh)
  3827.  10h    close file via FCB (see AH=10h)
  3828.  11h    search for first matching file with FCB (see AH=11h)
  3829.  12h    search for next matching file with FCB (see AH=12h)
  3830.  13h    delete file via FCB (see AH=13h)
  3831.  14h    sequential read via FCB (see AH=14h)
  3832.  15h    sequential write via FCB (see AH=15h)
  3833.  16h    create file via FCB (see AH=16h)
  3834.  17h    rename file via FCB (see AH=17h)
  3835.  18h    get bit map of logged drives
  3836.  19h    get default drive (see AH=19h)
  3837.  1Ah    set DMA address offset
  3838.  1Bh    get default disk allocation vector (see AH=1Bh)
  3839.  1Ch    set default drive to read-only
  3840.  1Dh    get bit map of read-only drives
  3841.  1Eh    set file attributes via FCB
  3842.  1Fh    get address of disk parameter block (see AH=1Fh)
  3843.  20h    get/set default user number
  3844.  21h    read random record via FCB (see AH=21h)
  3845.  22h    write random record via FCB (see AH=22h)
  3846.  23h    compute file size with FCB (see AH=23h)
  3847.  24h    get FCB random record number (see AH=24h)
  3848.  25h    reset specified drives
  3849.  26h    access specified drives
  3850.  27h    free specified drives
  3851.  28h    write random with FCB, zero fill (see also AH=28h)
  3852.  2Ah    lock records in FCB file (see AH=5Ch)
  3853.  2Bh    unlock records in FCB file (see AH=5Ch)
  3854.  2Ch    set BDOS multisector count
  3855.  2Dh    set BDOS error mode
  3856.  2Eh    get free space on disk
  3857.  2Fh    load, initialize, and jump to process
  3858.  30h    flush write-deferred buffers
  3859.  32h    call BIOS character routine
  3860.  33h    set DMA address segment
  3861.  34h    get DMA buffer address
  3862.  35h    CP/M-86 allocate maximum memory
  3863.  36h    allocate maximum memory segment absoute
  3864.  37h    CP/M-86 allocate memory segment
  3865.  38h    allocate memory segment absolute
  3866.  39h    CP/M-86 free specified memory segment
  3867.  3Ah    CP/M-86 free all memory
  3868.  3Bh    load .CMD file into memory
  3869.  40h    (DR-NET) log on a server
  3870.  41h    (DR-NET) log off a server
  3871.  42h    (DR-NET) send a message
  3872.  43h    (DR-NET) receive a message
  3873.  44h    (DR-NET) get network status
  3874.  45h    (DR-NET) get requestor configuration table
  3875.  46h    (DR-NET) set compatibility attributes
  3876.  47h    (DR-NET) get server configuration table
  3877.  48h    (DR-NET) set network error mode
  3878.  49h    (DR-NET) attach network
  3879.  4Ah    (DR-NET) detach network
  3880.  4Bh    (DR-NET) set default password
  3881.  4Ch    (DR-NET) get-set long timeout
  3882.  4Dh    (DR-NET) get parameter table
  3883.  50h    (DR-NET) get network information
  3884.  53h    get current time
  3885.  54h    set current time
  3886.  55h    get binary system date
  3887.  56h    set system date
  3888.  57h    allocate system flag
  3889.  58h    deallocate system flag
  3890.  59h    reserve memory in global area
  3891.  5Ah    lock physical drive
  3892.  5Bh    unlock physical drive
  3893.  5Ch    search path for executable file
  3894.  5Dh    load and execute command (see AH=4Bh)
  3895.  5Eh    get/set process exit code
  3896.  5Fh    set country information
  3897.  60h    get country information
  3898.  63h    truncate FCB file (see AH=28h)
  3899.  64h    create/update directory label
  3900.  65h    get directory label
  3901.  66h    get FCB date stamp and password mode
  3902.  67h    write extended FCB
  3903.  68h    set system date and time
  3904.  69h    get system date and time in binary
  3905.  6Ah    establish password for file access
  3906.  6Bh    get OS serial number
  3907.  6Dh    get/set console mode
  3908.  6Eh    get/set string delimiter
  3909.  6Fh    write block to default console
  3910.  70h    write block to default list device
  3911.  71h    execute DOS-compatible function
  3912.  74h    set FCB time and date stamps
  3913.  80h    allocate memory
  3914.  82h    deallocate memory
  3915.  83h    poll I/O device
  3916.  84h    wait on system flag
  3917.  85h    set system flag
  3918.  86h    create message queue
  3919.  87h    open message queue
  3920.  88h    delete message queue
  3921.  89h    read from message queue
  3922.  8Ah    conditionally read from message queue
  3923.  8Bh    write to message queue
  3924.  8Ch    conditionally write to message queue
  3925.  8Dh    delay calling process
  3926.  8Eh    call process dispatcher
  3927.  8Fh    terminate calling process
  3928.  90h    create a process
  3929.  91h    set calling process' priority
  3930.  92h    attach to default console
  3931.  93h    detach from default console
  3932.  95h    assign default console to process
  3933.  96h    interpret and execute commandline
  3934.  97h    resident procedure library
  3935.  98h    parse ASCII string into FCB (see AH=29h)
  3936.  99h    return default console
  3937.  9Ah    get address of system data
  3938.  9Bh    get system time and date
  3939.  9Ch    return calling process' descriptor
  3940.  9Dh    terminate process by name or PD address
  3941.  9Eh    attach to default list device
  3942.  9Fh    detach from default list device
  3943.  A0h    select default list device
  3944.  A1h    conditionally attach to default list device
  3945.  A2h    conditionally attach to default console
  3946.  A3h    get OS version number
  3947.  A4h    get default list device
  3948.  A5h    attach to default AUX
  3949.  A6h    detach from default AUX
  3950.  A7h    conditionally attach to default AUX
  3951.  A8h    set default AUX
  3952.  A9h    return default AUX
  3953.  ACh    read block from default AUX
  3954.  B0h    configure default AUX
  3955.  B1h    get/set device control parameters
  3956.  B2h    send Break through default AUX
  3957.  B3h    allocate physical memory
  3958.  B4h    free physical memory
  3959.  B5h    map physical memory
  3960.  B6h    nondestructive message queue read
  3961.  B7h    timed wait on system flag
  3962.  B8h    get/set I/O port mapping
  3963.  B9h    set list device timeout
  3964.  BAh    set AUX timeout value
  3965.  BBh    execute XIOS service
  3966.  FFh    return 80386 to native mode
  3967. ----------2144FFBXFFFF-----------------------
  3968. INT 21 - NewSpace - ???
  3969.     AX = 44FFh
  3970.     BX = FFFFh
  3971.     DX = ???
  3972. SeeAlso: AX=4414h/BX=FFFFh
  3973. ----------2145-------------------------------
  3974. INT 21 - DOS 2+ - "DUP" - DUPLICATE FILE HANDLE
  3975.     AH = 45h
  3976.     BX = file handle
  3977. Return: CF clear if successful
  3978.         AX = new handle
  3979.     CF set on error
  3980.         AX = error code (04h,06h) (see AH=59h)
  3981. Notes:    moving file pointer for either handle will also move it for the other,
  3982.       because both will refer to the same system file table
  3983.     for DOS versions prior to 3.3, file writes may be forced to disk by
  3984.       duplicating the file handle and closing the duplicate
  3985. SeeAlso: AH=3Dh,AH=46h
  3986. ----------2146-------------------------------
  3987. INT 21 - DOS 2+ - "DUP2", "FORCEDUP" - FORCE DUPLICATE FILE HANDLE
  3988.     AH = 46h
  3989.     BX = file handle
  3990.     CX = file handle to become duplicate of first handle
  3991. Return: CF clear if successful
  3992.     CF set on error
  3993.         AX = error code (04h,06h) (see AH=59h)
  3994. Notes:    closes file with handle CX if it is still open
  3995.     DOS 3.30 hangs if BX=CX on entry
  3996.     moving file pointer for either handle will also move it for the other,
  3997.       because both will refer to the same system file table
  3998. SeeAlso: AH=3Dh,AH=45h
  3999. ----------2147-------------------------------
  4000. INT 21 - DOS 2+ - "CWD" - GET CURRENT DIRECTORY
  4001.     AH = 47h
  4002.     DL = drive number (00h = default, 01h = A:, etc)
  4003.     DS:SI -> 64-byte buffer for ASCIZ pathname
  4004. Return: CF clear if successful
  4005.         AX = 0100h (undocumented)
  4006.     CF set on error
  4007.         AX = error code (0Fh) (see AH=59h)
  4008. Notes:    the returned path does not include a drive or the initial backslash
  4009.     many Microsoft products for Windows rely on AX being 0100h on success
  4010. SeeAlso: AH=19h,AH=3Bh
  4011. ----------2148-------------------------------
  4012. INT 21 - DOS 2+ - ALLOCATE MEMORY
  4013.     AH = 48h
  4014.     BX = number of paragraphs to allocate
  4015. Return: CF clear if successful
  4016.         AX = segment of allocated block
  4017.     CF set on error
  4018.         AX = error code (07h,08h) (see AH=59h)
  4019.         BX = size of largest available block
  4020. Notes:    DOS 3.30 coalesces free blocks while scanning for a block to allocate
  4021.     .COM programs are initially allocated the largest available memory
  4022.       block, and should free some memory with AH=49h before attempting any
  4023.       allocations
  4024. SeeAlso: AH=49h,AH=4Ah,AH=58h
  4025. ----------2149-------------------------------
  4026. INT 21 - DOS 2+ - FREE MEMORY
  4027.     AH = 49h
  4028.     ES = segment of block to free
  4029. Return: CF clear if successful
  4030.     CF set on error
  4031.         AX = error code (07h,09h) (see AH=59h)
  4032. Notes:    apparently never returns an error 07h, despite official docs; DOS 3.30
  4033.       code contains only an error 09h exit
  4034.     DOS 3.30 does not coalesce adjacent free blocks when a block is freed,
  4035.       only when a block is allocated or resized
  4036. SeeAlso: AH=48h,AH=4Ah
  4037. ----------214A-------------------------------
  4038. INT 21 - DOS 2+ - RESIZE MEMORY BLOCK
  4039.     AH = 4Ah
  4040.     BX = new size in paragraphs
  4041.     ES = segment of block to resize
  4042. Return: CF clear if successful
  4043.     CF set on error
  4044.         AX = error code (07h,08h,09h) (see AH=59h)
  4045.         BX = maximum paragraphs available for specified memory block
  4046. Notes:    under PCDOS 2.1 and 3.1 and MSDOS 3.2 and 3.3, if there is insufficient
  4047.       memory to expand the block as much as requested, the block will be
  4048.       made as large as possible
  4049.     DOS 3.30 coalesces any free blocks immediately following the block to
  4050.       be resized
  4051. SeeAlso: AH=48h,AH=49h
  4052. ----------214B-------------------------------
  4053. INT 21 - DOS 2+ - "EXEC" - LOAD AND/OR EXECUTE PROGRAM
  4054.     AH = 4Bh
  4055.     AL = type of load
  4056.         00h load and execute
  4057.         01h load but do not execute
  4058.         03h load overlay
  4059.         04h load and execute in background (European MSDOS 4.0 only)
  4060.         (see also AH=80h)
  4061.     DS:DX -> ASCIZ program name (must include extension)
  4062.     ES:BX -> parameter block (see below)
  4063. Return: CF clear if successful
  4064.         BX,DX destroyed
  4065.         if subfunction 01h, process ID set to new program's PSP; get with
  4066.         INT 21/AH=62h
  4067.     CF set on error
  4068.         AX = error code (01h,02h,05h,08h,0Ah,0Bh) (see AH=59h)
  4069. Notes:    DOS 2.x destroys all registers, including SS:SP
  4070.     for functions 00h and 01h, the calling process must ensure that there
  4071.       is enough unallocated memory available; if necessary, by releasing
  4072.       memory with AH=49h or AH=4Ah
  4073.     for function 01h, the value to be passed to the child program is put
  4074.       on top of the child's stack
  4075.     for function 03h, DOS assumes that the overlay is being loaded into
  4076.       memory allocated by the caller
  4077.     function 01h has been documented for DOS 5+, but was undocumented in
  4078.       prior versions
  4079. BUG:    DOS 2.00 assumes that DS points at the current program's PSP
  4080. SeeAlso: AX=4B05h,AH=4Ch,AH=4Dh,INT 2E
  4081.  
  4082. Format of EXEC parameter block for AL=00h,01h,04h:
  4083. Offset    Size    Description
  4084.  00h    WORD    segment of environment to copy for child process (copy caller's
  4085.         environment if 0000h)
  4086.  02h    DWORD    pointer to command tail to be copied into child's PSP
  4087.  06h    DWORD    pointer to first FCB to be copied into child's PSP
  4088.  0Ah    DWORD    pointer to second FCB to be copied into child's PSP
  4089.  0Eh    DWORD    (AL=01h) will hold subprogram's initial SS:SP on return
  4090.  12h    DWORD    (AL=01h) will hold entry point (CS:IP) on return
  4091.  
  4092. Format of EXEC parameter block for AL=03h:
  4093. Offset    Size    Description
  4094.  00h    WORD    segment at which to load overlay
  4095.  02h    WORD    relocation factor to apply to overlay if in .EXE format
  4096.  
  4097. Format of .EXE file header:
  4098. Offset    Size    Description
  4099.  00h  2 BYTEs    .EXE signature, either "MZ" or "ZM" (5A4Dh or 4D5Ah)
  4100.  02h    WORD    number of bytes in last 512-byte page of executable
  4101.  04h    WORD    total number of 512-byte pages in executable (includes any
  4102.         partial last page)
  4103.  06h    WORD    number of relocation entries
  4104.  08h    WORD    header size in paragraphs
  4105.  0Ah    WORD    minimum paragraphs of memory to allocation in addition to
  4106.         executable's size
  4107.  0Ch    WORD    maximum paragraphs to allocate in addition to executable's size
  4108.  0Eh    WORD    initial SS relative to start of executable
  4109.  10h    WORD    initial SP
  4110.  12h    WORD    checksum (one's complement of sum of all words in executable)
  4111.  14h    DWORD    initial CS:IP relative to start of executable
  4112.  18h    WORD    offset within header of relocation table
  4113.  1Ah    WORD    overlay number (normally 0000h = main program)
  4114. ---Borland TLINK---
  4115.  1Ch  2 BYTEs    ??? (apparently always 01h 00h)
  4116.  1Eh    BYTE    signature FBh
  4117.  1Fh    BYTE    TLINK version (major in high nybble, minor in low nybble)
  4118.  20h  2 BYTEs    ??? (v2.0 apparently always 72h 6Ah, v3.0 seems always 6Ah 72h)
  4119. ---other linkers---
  4120.  1Ch    var    optional information
  4121. ---
  4122.   N   N DWORDs    relocation items
  4123. ---new executable only---
  4124.  3Ch    DWORD    offset of new executable header if offset of relocation table
  4125.         is 40h or greater
  4126. Notes:    if word at offset 02h is 4, it should be treated as 00h, since pre-1.10
  4127.       versions of the MS linker set it that way
  4128.     if both minimum and maximum allocation (offset 0Ah/0Ch) are zero, the
  4129.       program is loaded as high in memory as possible
  4130.     the maximum allocation is set to FFFFh by default
  4131.  
  4132. Format of new executable header:
  4133. Offset    Size    Description
  4134.  00h  2 BYTEs    "NE" (4Eh 45h) signature
  4135.  02h  2 BYTEs    linker version (major, then minor)
  4136.  04h    WORD    offset to entry table
  4137.  06h    WORD    length of entry table in bytes
  4138.  08h    DWORD    file load CRC (0 in Borland's TPW)
  4139.  0Ch    BYTE    program flags
  4140.         bits 0-1 DGROUP type
  4141.           0 = none
  4142.           1 = single shared
  4143.           2 = multiple (unshared)
  4144.           3 = (null)
  4145.         bit 2:    global initialization
  4146.         bit 3:    protected mode only
  4147.         bit 4:    8086 instructions
  4148.         bit 5:    80286 instructions
  4149.         bit 6:    80386 instructions
  4150.         bit 7:    80x87 instructions
  4151.  0Dh    BYTE    application flags
  4152.         bits 0-2: application type
  4153.             001 full screen (not aware of Windows/P.M. API)
  4154.             010 compatible with Windows/P.M. API
  4155.             011 uses Windows/P.M. API
  4156.         bit 3: is a Family Application (OS/2)
  4157.         bit 5: 0=executable, 1=errors in image
  4158.         bit 7: DLL or driver rather than application
  4159.  0Eh    WORD    auto data segment index
  4160.  10h    WORD    initial local heap size
  4161.  12h    WORD    initial stack size
  4162.  14h    DWORD    program entry point (CS:IP)
  4163.  18h    DWORD    initial stack pointer (SS:SP)
  4164.  1Ch    WORD    segment count
  4165.  1Eh    WORD    module reference count
  4166.  20h    WORD    length of nonresident names table
  4167.  22h    WORD    offset from start of this header to segment table (see below)
  4168.  24h    WORD    offset from start of this header to resource table
  4169.  26h    WORD    offset from start of this header to resident names table
  4170.  28h    WORD    offset from start of this header to module reference table
  4171.  2Ah    WORD    offset from start of this header to imported names table
  4172.  2Ch    DWORD    offset from start of file to nonresident names table
  4173.  30h    WORD    count of moveable entry point listed in entry table
  4174.  32h    WORD    file alignment size shift count
  4175.         0 is equivalent to 9 (default 512-byte pages)
  4176.  34h    WORD    number of resource table entries
  4177.  36h    BYTE    target operating system
  4178.         00h unknown
  4179.         01h OS/2
  4180.         02h Windows
  4181.         03h European MS-DOS 4.x
  4182.         04h Windows 386
  4183.  37h    BYTE    other EXE flags
  4184.         bit 0: supports long filenames
  4185.         bit 1: 2.X protected mode
  4186.         bit 2: 2.X proportional font
  4187.         bit 3: gangload area
  4188.  38h    WORD    offset to return thunks or start of gangload area
  4189.  3Ah    WORD    offset to segment reference thunks or length of gangload area
  4190.  3Ch    WORD    minimum code swap area size
  4191.  3Eh  2 BYTEs    expected Windows version (minor version first)
  4192.  
  4193. Format of segment table record:
  4194.  00h    WORD    offset in file (shift left by alignment shift to get byte offs)
  4195.  02h    WORD    length of image in file
  4196.  04h    WORD    attributes
  4197.         bit 0,1,2: DATA segment flags
  4198.         bit 3: iterated
  4199.         bit 4: movable
  4200.         bit 5: sharable
  4201.         bit 6: preloaded
  4202.         bit 7: execute-only
  4203.         bit 8: relocations (directly following code for this segment)
  4204.         bit 9: debug info
  4205.         bits 10,11: 80286 DPL bits
  4206.         bit 12:        discardable
  4207.         bits 13-15: discard priority
  4208.  06h    WORD    size to allocate
  4209.  
  4210. Enhanced Mode New executable header:
  4211. Offset    Size    Description
  4212.  00h  2 BYTEs    "LE" (4Ch 45h) signature
  4213.  02h    WORD    ??? (may be linker version, but EXEHDR doesn't report it)
  4214.  04h    DWORD    executable format level
  4215.  08h    WORD    CPU type (see also INT 15/AH=C9h)
  4216.         01h Intel 80286 or upwardly compatibile
  4217.         02h Intel 80386 or upwardly compatibile            
  4218.         03h Intel 80486 or upwardly compatibile            
  4219.  0Ah    WORD    target operating system
  4220.         01h OS/2
  4221.         02h Windows
  4222.         03h DOS4.x
  4223.         04h Windows 386
  4224.  0Ch    DWORD    module version
  4225.  10h    DWORD    module type
  4226.         bit 2: initialization (only for DLLs)
  4227.             0 = global
  4228.             1 = per-process
  4229.         bit 4: no internal fixups in executable image
  4230.         bit 5: no external fixups in executable image
  4231.         bits 8,9,10:
  4232.             1 = incompatible with PM windowing \
  4233.             2 = compatible with PM windowing    > (only for
  4234.             3 = uses PM windowing API       /    programs)
  4235.         bit 13: module not loadable (only for programs)
  4236.         bit 15: module is DLL rather than program
  4237.  14h    DWORD    number of memory pages
  4238.  18h    Initial CS:EIP
  4239.     DWORD    object
  4240.     DWORD    offset
  4241.  20h    Initial SS:ESP
  4242.     DWORD    object
  4243.     DWORD    offset
  4244.  28h    DWORD    memory page size
  4245.  2Ch    DWORD    bytes on last page
  4246.  30h    DWORD    fixup section size
  4247.  34h    DWORD    fixup section checksum
  4248.  38h    DWORD    loader section size
  4249.  3Ch    DWORD    loader section checksum
  4250.  40h    DWORD    object table offset
  4251.  44h    DWORD    object table entries
  4252.  48h    DWORD    010Ch ???
  4253.  4CH    DWORD    0000h ???
  4254.  50h    DWORD    resource table offset
  4255.  54h    DWORD    resource table entries
  4256.  58h    DWORD    resident names table offset
  4257.  5Ch    DWORD    entry table offset
  4258.  60h    DWORD    module directives table offset
  4259.  64h    DWORD    Module Directives entries
  4260.  68h    DWORD    ??? apparently unknown table #1 offset
  4261.  6Ch    DWORD    ??? apparently unknown table #2 offset
  4262.  70h    DWORD    imported modules name table offset
  4263.  74h    DWORD    imported modules
  4264.  78h    DWORD    imported procedures name table offset
  4265.  7Ch    DWORD    per-page checksum table offset
  4266.  80h    DWORD    preload pages ??? offset
  4267.  84h    DWORD    preload pages number
  4268.  88h    DWORD    non-resident names table offset
  4269.  8Ch    DWORD    non-resident names table length
  4270.  90h    DWORD    non-resident names checksum
  4271.  94h    DWORD    automatic data object
  4272.  98h    DWORD    debug information offset
  4273.  9Ch    DWORD    debug information length
  4274.  A0h    DWORD    preload instance pages number
  4275.  A4h    DWORD    demand instance pages number
  4276.  A8h    DWORD    extra heap allocation
  4277.  ACh    ???
  4278. Note:    used by EMM386.EXE, QEMM, and Windows 3.0 Enhanced Mode drivers
  4279. ----------214B-------------------------------
  4280. INT 21 - ELRES v1.0 only - INSTALLATION CHECK
  4281.     AH = 4Bh
  4282.     DS:DX = 0000h:0000h
  4283. Return: ES:BX -> ELRES history structure (see AH=2Bh/CX=454Ch)
  4284.     DX = DABEh (signature, DAve BEnnett)
  4285. Note:    ELRES is an MSDOS return code (errorlevel) recorder by David H. Bennett
  4286. SeeAlso: AH=2Bh/CX=454Ch
  4287. ----------214B04-----------------------------
  4288. INT 21 - VIRUS - "MG", "699"/"Thirteen Minutes" - INSTALLATION CHECK
  4289.     AX = 4B04h
  4290. Return: CF clear if "MG" resident
  4291.     AX = 044Bh if "699"/"Thirteen Minutes" resident
  4292. SeeAlso: AX=4243h,AX=4B25h
  4293. ----------214B05-----------------------------
  4294. INT 21 - DOS 5.0 - SET EXECUTION STATE
  4295.     AX = 4B05h
  4296.     DS:DX -> execution state structure (see below)
  4297. Return: CF clear if successful
  4298.         AX = 0000h
  4299.     CF set on error
  4300.         AX = error code (see AH=59h)
  4301. Note:    used by programs which intercept AX=4B00h to prepare new programs for
  4302.       execution (including setting the DOS version number).     No DOS, BIOS
  4303.       or other software interrupt may be called after return from this call
  4304.       before commencement of the child process.  If DOS is running in the
  4305.       HMA, A20 is turned off on return from this call.
  4306. SeeAlso: AH=4Bh
  4307.  
  4308. Format of execution state structure:
  4309. Offset    Size    Description
  4310.  00h    WORD    reserved (00h)
  4311.  02h    WORD    type flags
  4312.         bit 0: program is an .EXE
  4313.             1: program is an overlay
  4314.  04h    DWORD    pointer to ASCIZ name of program file
  4315.  08h    WORD    PSP segment of new program
  4316.  0Ah    DWORD    starting CS:IP of new program
  4317.  0Eh    DWORD    program size including PSP
  4318. ----------214B25-----------------------------
  4319. INT 21 - VIRUS - "1063"/"Mono" - INSTALLATION CHECK
  4320.     AX = 4B25h
  4321. Return: DI = 1234h if resident
  4322. SeeAlso: AX=4B04h,AX=4B40h
  4323. ----------214B40-----------------------------
  4324. INT 21 - VIRUS - "Plastique"/"AntiCad" - INSTALLATION CHECK
  4325.     AX = 4B40h
  4326. Return: AX = 5678h if resident
  4327. SeeAlso: AX=4B25h,AX=4B41h,AX=4B4Ah
  4328. ----------214B41-----------------------------
  4329. INT 21 - VIRUS - "Plastique"/"AntiCad" - ???
  4330.     AX = 4B41h
  4331.     ???
  4332. Return: ???
  4333. SeeAlso: AX=4B40h
  4334. ----------214B4A-----------------------------
  4335. INT 21 - VIRUS - "Jabberwocky" - INSTALLATION CHECK
  4336.     AX = 4B4Ah
  4337. Return: AL = 57h if resident
  4338. SeeAlso: AX=4B40h,AX=4B4Bh
  4339. ----------214B4B-----------------------------
  4340. INT 21 - VIRUS - "Horse-2" - INSTALLATION CHECK
  4341.     AX = 4B4Bh
  4342. Return: CF clear if resident
  4343. SeeAlso: AX=4B4Ah,AX=4B4Dh
  4344. ----------214B4D-----------------------------
  4345. INT 21 - VIRUS - "Murphy-2", "Patricia"/"Smack" - INSTALLATION CHECK
  4346.     AX = 4B4Dh
  4347. Return: CF clear if resident
  4348. SeeAlso: AX=4B4Ah,AX=4B50h
  4349. ----------214B50-----------------------------
  4350. INT 21 - VIRUS - "Plastique-2576"/"AntiCad-2576" - INSTALLATION CHECK
  4351.     AX = 4B50h
  4352. Return: AX = 1234h if resident
  4353. SeeAlso: AX=4B4Dh,AX=4B53h,AX=4B60h
  4354. ----------214B53-----------------------------
  4355. INT 21 - VIRUS - "Horse" - INSTALLATION CHECK
  4356.     AX = 4B53h
  4357. Return: CF clear if resident
  4358. SeeAlso: AX=4B50h,AX=4B55h
  4359. ----------214B55-----------------------------
  4360. INT 21 - VIRUS - "Sparse" - INSTALLATION CHECK
  4361.     AX = 4B55h
  4362. Return: AX = 1231h if resident
  4363. SeeAlso: AX=4B53h,AX=4B59h
  4364. ----------214B59-----------------------------
  4365. INT 21 - VIRUS - "Murphy-1", "Murphy-4" - INSTALLATION CHECK
  4366.     AX = 4B59h
  4367. Return: CF clear if resident
  4368. SeeAlso: AX=4B50h,AX=4B5Eh
  4369. ----------214B5E-----------------------------
  4370. INT 21 - VIRUS - "Brothers" - INSTALLATION CHECK
  4371.     AX = 4B5Eh
  4372. Return: CF clear if resident
  4373. SeeAlso: AX=4B59h,AX=4B87h
  4374. ----------214B60-----------------------------
  4375. INT 21 - VIRUS - "Plastique-2576"/"AntiCad-2576" - ???
  4376.     AX = 4B60h
  4377.     ???
  4378. Return: ???
  4379. SeeAlso: AX=4B50h
  4380. ----------214B87-----------------------------
  4381. INT 21 - VIRUS - "Shirley" - INSTALLATION CHECK
  4382.     AX = 4B87h
  4383. Return: AX = 6663h if resident
  4384. SeeAlso: AX=4B5Eh,AX=4B95h
  4385. ----------214B95-----------------------------
  4386. INT 21 - VIRUS - "Zherkov-1882" - INSTALLATION CHECK
  4387.     AX = 4B95h
  4388. Return: AX = 1973h if resident
  4389. SeeAlso: AX=4B87h,AX=4BA7h
  4390. ----------214BA7-----------------------------
  4391. INT 21 - VIRUS - "1876"/"Dash-em" - INSTALLATION CHECK
  4392.     AX = 4BA7h
  4393. Return: AX = B459h if resident
  4394. SeeAlso: AX=4B95h,AX=4BAAh
  4395. ----------214BAA-----------------------------
  4396. INT 21 - VIRUS - "Nomenklatura" - INSTALLATION CHECK
  4397.     AX = 4BAAh
  4398. Return: CF clear if resident
  4399. SeeAlso: AX=4BA7h,AX=4BAFh
  4400. ----------214BAF-----------------------------
  4401. INT 21 - VIRUS - "948"/"Screenplus1", "Magnitogorsk" - INSTALLATION CHECK
  4402.     AX = 4BAFh
  4403. Return: AL = AFh if "Magnitogorsk" resident
  4404.     AL = FAh if "948"/"Screenplus1" resident
  4405. SeeAlso: AX=4BAAh,AX=4BDDh
  4406. ----------214BDD-----------------------------
  4407. INT 21 - VIRUS - "Lozinsky"/"Zherkov" - INSTALLATION CHECK
  4408.     AX = 4BDDh
  4409. Return: AX = 1234h
  4410. SeeAlso: AX=4BAFh,AX=4BFEh
  4411. ----------214BEE-----------------------------
  4412. INT 21 - F-DRIVER.SYS v1.14+ - GRAB INT 21
  4413.     AX = 4BEEh
  4414. Return: AX = 1234h if grab successful
  4415.        = 2345h if failed (INT 21 grabbed previously)
  4416. Notes:    F-DRIVER.SYS is part of the F-PROT virus/trojan protection package by
  4417.       Fridrik Skulason
  4418.     when called the first time, this function moves the INT 21 monitoring
  4419.       code from its original location in the INT 21 chain to be the first
  4420.       thing called by INT 21.  This is the mechanism used by F-NET.
  4421. SeeAlso: INT 2F/AX=4653h
  4422. ----------214BF0-----------------------------
  4423. INT 21 - DIET v1.10+ (Overlay Mode) - INSTALLATION CHECK
  4424.     AX = 4BF0h
  4425. Return: CF clear if installed
  4426.         AX = 899Dh
  4427. Note:    DIET is an executable-compression program
  4428. SeeAlso: AX=4BF1h
  4429. ----------214BF1-----------------------------
  4430. INT 21 - DIET v1.10+ (Overlay Mode) - EXPAND PROGRAM???
  4431.     AX = 4BF1h
  4432. Return: ???
  4433. SeeAlso: AX=4BF0h
  4434. ----------214BFE-----------------------------
  4435. INT 21 - VIRUS - "Hitchcock", "Dark Avenger-1028", "1193" - INSTALLATION CHECK
  4436.     AX = 4BFEh
  4437. Return: AX = 1234h if "Hitchcock" resident
  4438.     AX = ABCDh if "1193"/"Copyright" resident
  4439.     DI = 55BBh if "Dark Avenger-1028" resident
  4440. SeeAlso: AX=4BDDh,AX=4BFFh"Justice"
  4441. ----------214BFF-----------------------------
  4442. INT 21 - VIRUS - "USSR-707", "Justice", "Europe 92" - INSTALLATION CHECK
  4443.     AX = 4BFFh
  4444. Return: BL = FFh if "USSR-707" resident
  4445.     DI = 55AAh if "Justice" resident
  4446.     CF clear if "Europe 92" resident
  4447. SeeAlso: AX=4BFEh,AX=4BFFh"Cascade",AX=5252h
  4448. ----------214BFFSI0000-----------------------
  4449. INT 21 - VIRUS - "Cascade" - INSTALLATION CHECK
  4450.     AX = 4BFFh
  4451.     SI = 0000h
  4452.     DI = 0000h
  4453. Return: DI = 55AAh if installed
  4454. SeeAlso: AX=4BFFh"Justice",AX=5252h
  4455. ----------214C-------------------------------
  4456. INT 21 - DOS 2+ - "EXIT" - TERMINATE WITH RETURN CODE
  4457.     AH = 4Ch
  4458.     AL = return code
  4459. Return: never returns
  4460. Notes:    unless the process is its own parent (see AH=26h, offset 16h in PSP),
  4461.       all open files are closed and all memory belonging to the process
  4462.       is freed
  4463.     all network file locks should be removed before calling this function
  4464. SeeAlso: AH=00h,AH=26h,AH=4Bh,AH=4Dh,INT 20,INT 22
  4465. ----------214D-------------------------------
  4466. INT 21 - DOS 2+ - GET RETURN CODE
  4467.     AH = 4Dh
  4468. Return: AH = termination type
  4469.         00h normal (INT 20,INT 21/AH=00h, or INT 21/AH=4Ch)
  4470.         01h control-C abort
  4471.         02h critical error abort
  4472.         03h terminate and stay resident (INT 21/AH=31h or INT 27)
  4473.     AL = return code
  4474. Note:    the word in which DOS stores the return code is cleared after being
  4475.       read by this function, so the return code can only be retrieved once
  4476. SeeAlso: AH=4Bh,AH=4Ch
  4477. ----------214E-------------------------------
  4478. INT 21 - DOS 2+ - "FINDFIRST" - FIND FIRST MATCHING FILE
  4479.     AH = 4Eh
  4480.     AL = special flag for use by APPEND (see note below)
  4481.     CX = file attribute mask (see AX=4301h) (bits 0 and 5 ignored)
  4482.     DS:DX -> ASCIZ file specification (may include path and wildcards)
  4483. Return: CF clear if successful
  4484.         [DTA] = FindFirst data block (see below)
  4485.     CF set on error
  4486.         AX = error code (02h,03h,12h) (see AH=59h)
  4487. Notes:    for search attributes other than 08h, all files with at MOST the
  4488.       specified combination of hidden, system, and directory attributes
  4489.       will be returned.  Under DOS 2.x, searching for attribute 08h
  4490.       (volume label) will also return normal files, while under DOS 3+
  4491.       only the volume label (if any) will be returned.
  4492.     this call also returns successfully if given the name of a character
  4493.       device without wildcards.  DOS 2.x returns attribute 00h, size 0,
  4494.       and the current date and time.  DOS 3+ returns attribute 40h and the
  4495.       current date and time.
  4496.     immediately after an INT 2F/AX=B711h (APPEND return found name), the
  4497.       name at DS:DX will be overwritten; if AL=00h on entry, the actual
  4498.       found pathname will be stored, otherwise, the actual found path
  4499.       will be prepended to the original filespec without a path.
  4500.     under LANtastic, this call may be used to obtain a list of a server's
  4501.       shared resources by searching for "\\SERVER\*.*"; a list of printer
  4502.       resources may be obtained by searching for "\\SERVER\@*.*"
  4503. BUG:    under DOS 3.x and 4.x, the second and subsequent calls to this function
  4504.       with a character device name (no wildcards) and search attributes
  4505.       which include the volume-label bit (08h) will fail unless there is
  4506.       an intervening DOS call which implicitly or explicity performs a
  4507.       directory search without the volume-label bit.  Such implicit
  4508.       searches are performed by CREATE (AH=3Ch), OPEN (AH=3Dh), UNLINK
  4509.       (AH=41h), and RENAME (AH=56h)
  4510. SeeAlso: AH=11h,AH=4Fh,AX=4301h,INT 2F/AX=111Bh,INT 2F/AX=B711h
  4511.  
  4512. Format of FindFirst data block:
  4513. Offset    Size    Description
  4514. ---PCDOS 3.10, PCDOS 4.01, MSDOS 3.2/3.3/5.0---
  4515.  00h    BYTE    drive letter
  4516.  01h 11 BYTEs    search template
  4517.  0Ch    BYTE    search attributes
  4518. ---DOS 2.x (and some DOS 3.x???)---
  4519.  00h    BYTE    search attributes
  4520.  01h    BYTE    drive letter
  4521.  02h 11 BYTEs    search template
  4522. ---WILDUNIX.COM---
  4523.  00h 12 BYTEs    15-character wildcard search pattern and drive letter (packed)
  4524.  0Ch    BYTE    search attributes
  4525. ---DOS 2.x and most 3.x---
  4526.  0Dh    WORD    entry count within directory
  4527.  0Fh    DWORD    pointer to DTA???
  4528.  13h    WORD    cluster number of start of parent directory
  4529. ---PCDOS 4.01, MSDOS 3.2/3.3/5.0---
  4530.  0Dh    WORD    entry count within directory
  4531.  0Fh    WORD    cluster number of start of parent directory
  4532.  11h  4 BYTEs    reserved
  4533. ---all versions, documented fields---
  4534.  15h    BYTE    attribute of file found
  4535.  16h    WORD    file time
  4536.             bits 11-15: hour
  4537.             bits 5-10:    minute
  4538.             bits 0-4:    seconds/2
  4539.  18h    WORD    file date
  4540.             bits 9-15:    year-1980
  4541.             bits 5-8:    month
  4542.             bits 0-4:    day
  4543.  1Ah    DWORD    file size
  4544.  1Eh 13 BYTEs    ASCIZ filename+extension
  4545. ----------214E-------------------------------
  4546. INT 21 - WILDUNIX.COM internal - INSTALLATION CHECK
  4547.     AH = 4Eh
  4548.     DS:DX = 0000h:0000h
  4549. Return:    AH = 99h if installed
  4550. Note:    WILDUNIX.COM is a resident Unix-style wildcard expander by Steve
  4551.       Hosgood and Terry Barnaby
  4552. ----------214F-------------------------------
  4553. INT 21 - DOS 2+ - "FINDNEXT" - FIND NEXT MATCHING FILE
  4554.     AH = 4Fh
  4555.     [DTA] = data block from previous FindFirst or FindNext call
  4556. Return: CF clear if successful
  4557.     CF set on error
  4558.         AX = error code (12h) (see AH=59h)
  4559. SeeAlso: AH=12h,AH=4Eh
  4560. ----------2150-------------------------------
  4561. INT 21 - DOS 2+ internal - SET CURRENT PROCESS ID (SET PSP ADDRESS)
  4562.     AH = 50h
  4563.     BX = segment of PSP for new process
  4564. Notes:    DOS uses the current PSP address to determine which processes own files
  4565.       and memory; it corresponds to process identifiers used by other OSs
  4566.     under DOS 2.x, this function cannot be invoked inside an INT 28h
  4567.       handler without setting the Critical Error flag
  4568.     under DOS 3+, this function does not use any of the DOS-internal stacks
  4569.       and is thus fully reentrant
  4570.     supported by OS/2 compatibility box
  4571.     not documented for DOS 2.x-4.x, but newly documented for 5.0.
  4572. SeeAlso: AH=26h,AH=51h,AH=62h
  4573. ----------2151-------------------------------
  4574. INT 21 - DOS 2+ internal - GET CURRENT PROCESS ID (GET PSP ADDRESS)
  4575.     AH = 51h
  4576. Return: BX = segment of PSP for current process
  4577. Notes:    DOS uses the current PSP address to determine which processes own files
  4578.       and memory; it corresponds to process identifiers used by other OSs
  4579.     under DOS 2.x, this function cannot be invoked inside an INT 28h
  4580.       handler without setting the Critical Error flag
  4581.     under DOS 3+, this function does not use any of the DOS-internal stacks
  4582.       and is thus fully reentrant
  4583.     supported by OS/2 compatibility box
  4584.     identical to the documented AH=62h
  4585.     undocumented for DOS 2.x-4.x, but newly documented for 5.0.
  4586. SeeAlso: AH=26h,AH=50h,AH=62h
  4587. ----------2152-------------------------------
  4588. INT 21 - DOS 2+ internal - "SYSVARS" - GET LIST OF LISTS
  4589.     AH = 52h
  4590. Return: ES:BX -> DOS list of lists
  4591. Note:    partially supported by OS/2 v1.1 compatibility box (however, most
  4592.       pointers are FFFFh:FFFFh, LASTDRIVE is FFh, and the NUL header "next"
  4593.       pointer is FFFFh:FFFFh).
  4594.  
  4595. Format of List of Lists:
  4596. Offset    Size    Description
  4597.  -12    WORD    (DOS 3.1-3.3) sharing retry count (see AX=440Bh)
  4598.  -10    WORD    (DOS 3.1-3.3) sharing retry delay (see AX=440Bh)
  4599.  -8    DWORD    (DOS 3.x) pointer to current disk buffer
  4600.  -4    WORD    (DOS 3.x) pointer in DOS code segment of unread CON input
  4601.         when CON is read via a handle, DOS reads an entire line,
  4602.           and returns the requested portion, buffering the rest
  4603.           for the next read.  0000h indicates no unread input
  4604.  -2    WORD    segment of first memory control block
  4605.  00h    DWORD    pointer to first Drive Parameter Block (see AH=32h)
  4606.  04h    DWORD    pointer to first System File Table (see below)
  4607.  08h    DWORD    pointer to active CLOCK$ device's header
  4608.  0Ch    DWORD    pointer to active CON device's header
  4609. ---DOS 2.x---
  4610.  10h    BYTE    number of logical drives in system
  4611.  11h    WORD    maximum bytes/block of any block device
  4612.  13h    DWORD    pointer to first disk buffer (see below)
  4613.  17h 18 BYTEs    actual NUL device driver header (not a pointer!)
  4614.         NUL is always the first device on DOS's linked list of device 
  4615.         drivers. (see below for format)
  4616. ---DOS 3.0---
  4617.  10h    BYTE    number of block devices
  4618.  11h    WORD    maximum bytes/block of any block device
  4619.  13h    DWORD    pointer to first disk buffer (see below)
  4620.  17h    DWORD    pointer to array of current directory structures (see below)
  4621.  1Bh    BYTE    value of LASTDRIVE command in CONFIG.SYS (default 5)
  4622.  1Ch    DWORD    pointer to STRING= workspace area
  4623.  20h    WORD    size of STRING area (the x in STRING=x from CONFIG.SYS)
  4624.  22h    DWORD    pointer to FCB table
  4625.  26h    WORD    the y in FCBS=x,y from CONFIG.SYS
  4626.  28h 18 BYTEs    actual NUL device driver header (not a pointer!)
  4627.         NUL is always the first device on DOS's linked list of device 
  4628.         drivers. (see below for format)
  4629. ---DOS 3.1-3.3---
  4630.  10h    WORD    maximum bytes per sector of any block device
  4631.  12h    DWORD    pointer to first disk buffer in buffer chain (see below)
  4632.  16h    DWORD    pointer to array of current directory structures (see below)
  4633.  1Ah    DWORD    pointer to system FCB tables (see below)
  4634.  1Eh    WORD    number of protected FCBs (the y in the CONFIG.SYS FCBS=x,y)
  4635.  20h    BYTE    number of block devices installed
  4636.  21h    BYTE    number of available drive letters (largest of 5, installed
  4637.         block devices, and CONFIG.SYS LASTDRIVE=).  Also size of
  4638.         current directory structure array.
  4639.  22h 18 BYTEs    actual NUL device driver header (not a pointer!)
  4640.         NUL is always the first device on DOS's linked list of device
  4641.         drivers. (see below for format)
  4642.  34h    BYTE    number of JOIN'ed drives
  4643. ---DOS 4.x---
  4644.  10h    WORD    maximum bytes per sector of any block device
  4645.  12h    DWORD    pointer to disk buffer info record (see below)
  4646.  16h    DWORD    pointer to array of current directory structures (see below)
  4647.  1Ah    DWORD    pointer to system FCB tables (see below)
  4648.  1Eh    WORD    number of protected FCBs (the y in the CONFIG.SYS FCBS=x,y)
  4649.         (always 00h for DOS 5.0)
  4650.  20h    BYTE    number of block devices installed
  4651.  21h    BYTE    number of available drive letters (largest of 5, installed
  4652.         block devices, and CONFIG.SYS LASTDRIVE=).  Also size of
  4653.         current directory structure array.
  4654.  22h 18 BYTEs    actual NUL device driver header (not a pointer!)
  4655.         NUL is always the first device on DOS's linked list of device
  4656.         drivers. (see below for format)
  4657.  34h    BYTE    number of JOIN'ed drives???
  4658.  35h    WORD    pointer within IBMDOS code segment to list of special program
  4659.         names (see below)
  4660.         (always 0000h for DOS 5.0)
  4661.  37h    DWORD    pointer to FAR routine for resident IFS utility functions
  4662.         (see below)
  4663.         may be called by any IFS driver which does not wish to
  4664.         service functions 20h or 24h-28h itself
  4665.  3Bh    DWORD    pointer to chain of IFS (installable file system) drivers
  4666.  3Fh    WORD    the x in BUFFERS x,y (rounded up to multiple of 30 if in EMS)
  4667.  41h    WORD    the y in BUFFERS x,y
  4668.  43h    BYTE    boot drive (1=A:)
  4669.  44h    BYTE    01h if 80386+, 00h otherwise???
  4670.  45h    WORD    extended memory size in K
  4671. ---DOS 5.0---
  4672.  10h 39 BYTEs    as for DOS 4.x (see above)
  4673.  37h    DWORD    pointer to SETVER program list or 0000h:0000h
  4674.  3Bh    WORD    ??? pointer to function in DOS CS
  4675.  3Dh    WORD    ??? apparently 0000h if DOS loaded low, PSP of most-recently
  4676.         EXECed program if DOS in HMA
  4677.  3Fh  8 BYTEs    as for DOS 4.x (see above)
  4678.  
  4679. Format of memory control block (see also below):
  4680. Offset    Size    Description
  4681.  00h    BYTE    block type: 5Ah if last block in chain, otherwise 4Dh
  4682.  01h    WORD    PSP segment of owner or
  4683.         0000h if free
  4684.         0006h if DR-DOS XMS UMB
  4685.         0007h if DR-DOS excluded upper memory ("hole")
  4686.         0008h if belongs to DOS
  4687.  03h    WORD    size of memory block in paragraphs
  4688.  05h  3 BYTEs    unused
  4689. ---DOS 2.x,3.x---
  4690.  08h  8 BYTEs    unused
  4691. ---DOS 4+ ---
  4692.  08h  8 BYTEs    ASCII program name if PSP memory block or DR-DOS UMB,
  4693.           else garbage
  4694.         null-terminated if less than 8 characters
  4695. Notes:    under DOS 3.1+, the first memory block is the DOS data segment,
  4696.       containing installable drivers, buffers, etc.
  4697.     under DOS 4.x it is divided into subsegments, each with its own memory
  4698.       control block (see below), the first of which is at offset 0000h
  4699.     for DOS 5.0, blocks owned by DOS may have either "SC" or "SD" in bytes
  4700.       08h and 09h.    "SC" is system code or locked-out inter-UMB memory,
  4701.       "SD" is system data, device drivers, etc.
  4702.     Some versions of DR-DOS use only seven characters of the program name,
  4703.       placing a NUL in the eighth byte.
  4704.  
  4705. Format of MSDOS 5.0 UMB control block:
  4706. Offset    Size    Description
  4707.  00h    BYTE    type: 5Ah if last block in chain, 4Dh otherwise
  4708.  01h    WORD    first available paragraph in UMB if control block at start
  4709.         of UMB, 000Ah if control block at end of UMB
  4710.  03h    WORD    length in paragraphs of following UMB or locked-out region
  4711.  05h  3 BYTEs    unused
  4712.  08h  8 BYTEs    block type name: "UMB" if start block, "SM" if end block in UMB
  4713.  
  4714. Format of STARLITE memory control block:
  4715. Offset    Size    Description
  4716.  00h    BYTE    block type: 5Ah if last block in chain, otherwise 4Dh
  4717.  01h    WORD    PSP segment of owner, 0000h if free, 0008h if belongs to DOS
  4718.  03h    WORD    size of memory block in paragraphs
  4719.  05h    BYTE    unused
  4720.  06h    WORD    segment address of next memory control block (0000h if last)
  4721.  08h    WORD    segment address of previous memory control block or 0000h
  4722.  0Ah  6 BYTEs    reserved
  4723.  
  4724. Format of DOS 4.x data segment subsegment control blocks:
  4725. Offset    Size    Description
  4726.  00h    BYTE    subsegment type (blocks typically appear in this order)
  4727.         "D"  device driver
  4728.         "E"  device driver appendage
  4729.         "I"  IFS (Installable File System) driver
  4730.         "F"  FILES=  control block storage area (for FILES>5)
  4731.         "X"  FCBS=   control block storage area, if present
  4732.         "C"  BUFFERS EMS workspace area (if BUFFERS /X option used)
  4733.         "B"  BUFFERS=  storage area
  4734.         "L"  LASTDRIVE=     current directory structure array storage area
  4735.         "S"  STACKS=  code and data area, if present (see below)
  4736.         "T"  INSTALL= transient code
  4737.  01h    WORD    paragraph of subsegment start (usually the next paragraph)
  4738.  03h    WORD    size of subsegment in paragraphs
  4739.  05h  3 BYTEs    unused
  4740.  08h  8 BYTEs    for types "D" and "I", base name of file from which the driver
  4741.           was loaded (unused for other types)
  4742.  
  4743. Format of data at start of STACKS code segment (if present):
  4744. Offset    Size    Description
  4745.  00h    WORD    ???
  4746.  02h    WORD    number of stacks (the x in STACKS=x,y)
  4747.  04h    WORD    size of stack control block array (should be 8*x)
  4748.  06h    WORD    size of each stack (the y in STACKS=x,y)
  4749.  08h    DWORD    ptr to STACKS data segment
  4750.  0Ch    WORD    offset in STACKS data segment of stack control block array
  4751.  0Eh    WORD    offset in STACKS data segment of last element of that array
  4752.  10h    WORD    offset in STACKS data segment of the entry in that array for
  4753.         the next stack to be allocated (initially same as value in 0Eh
  4754.         and works its way down in steps of 8 to the value in 0Ch as
  4755.         hardware interrupts pre-empt each other)
  4756. Note:    the STACKS code segment data may, if present, be located as follows:
  4757.     DOS 3.2:    The code segment data is at a paragraph boundary fairly early
  4758.         in the IBMBIO segment (seen at 0070:0190h)
  4759.     DOS 3.3:    The code segment is at a paragraph boundary in the DOS data
  4760.         segment, which may be determined by inspecting the segment
  4761.         pointers of the vectors for those of interrupts 02h, 08h-0Eh,
  4762.         70h, 72-77h which have not been redirected by device drivers or
  4763.         TSRs.
  4764.     DOS 4.x:    Identified by sub-segment control block type "S" within the DOS
  4765.         data segment.
  4766.  
  4767. Format of array elements in STACKS data segment:
  4768. Offset    Size    Description
  4769.  00h    BYTE    status: 00h=free, 01h=in use, 03h=corrupted by overflow of
  4770.         higher stack.
  4771.  01h    BYTE    not used
  4772.  02h    WORD    previous SP
  4773.  04h    WORD    previous SS
  4774.  06h    WORD    ptr to word at top of stack (new value for SP). The word at the
  4775.         top of the stack is preset to point back to this control block.
  4776.  
  4777. SHARE.EXE hooks (DOS 3.1-5.00):
  4778. (offsets from first system file table--pointed at by ListOfLists+04h)
  4779. Offset    Size    Description
  4780. -3Ch    DWORD    pointer to FAR routine for ???
  4781.         Note: not called by MSDOS 3.3, set to 0000h:0000h by SHARE 3.3
  4782. -38h    DWORD    pointer to FAR routine called on opening file
  4783.         on call, internal DOS location points at filename(see AX=5D06h)
  4784.         Return: CF clear if successful
  4785.             CF set on error
  4786.                 AX = DOS error code (24h) (see AH=59h)
  4787.         Note: SHARE assumes DS=SS=DOS DS, direct-accesses DOS internals
  4788.             to get name of file just opened
  4789. -34h    DWORD    pointer to FAR routine called on closing file
  4790.         ES:DI -> system file table
  4791.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  4792.             does something to every lock record for file
  4793. -30h    DWORD    pointer to FAR routine to close all files for given computer
  4794.         (called by AX=5D03h)
  4795.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  4796. -2Ch    DWORD    pointer to FAR routine to close all files for given process
  4797.         (called by AX=5D04h)
  4798.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  4799. -28h    DWORD    pointer to FAR routine to close file by name
  4800.         (called by AX=5D02h)
  4801.         DS:SI -> DOS parameter list (see AX=5D00h)
  4802.            DPL's DS:DX -> name of file to close
  4803.         Return: CF clear if successful
  4804.             CF set on error
  4805.                 AX = DOS error code (03h) (see AH=59h)
  4806.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  4807. -24h    DWORD    pointer to FAR routine to lock region of file
  4808.         call with BX = file handle
  4809.               CX:DX = starting offset
  4810.               SI:AX = size
  4811.         Return: CF set on error
  4812.                 AL = DOS error code (21h) (see AH=59h)
  4813.         Note: only called if file is marked as remote
  4814.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  4815. -20h    DWORD    pointer to FAR routine to unlock region of file
  4816.         call with BX = file handle
  4817.               CX:DX = starting offset
  4818.               SI:AX = size
  4819.         Return: CF set on error
  4820.                 AL = DOS error code (21h) (see AH=59h)
  4821.         Note: only called if file is marked as remote
  4822.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  4823. -1Ch    DWORD    pointer to FAR routine to check if file region is locked
  4824.         call with ES:DI -> system file table entry for file
  4825.             CX = length of region from current position in file
  4826.         Return: CF set if any portion of region locked
  4827.                 AX = 0021h
  4828.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  4829. -18h    DWORD    pointer to FAR routine to get open file list entry
  4830.         (called by AX=5D05h)
  4831.         call with DS:SI -> DOS parameter list (see AX=5D00h)
  4832.             DPL's BX = index of sharing record
  4833.             DPL's CX = index of SFT in SFT chain of sharing rec
  4834.         Return: CF set on error or not loaded
  4835.                 AX = DOS error code (12h) (see AH=59h)
  4836.             CF clear if successful
  4837.                 ES:DI -> filename
  4838.                 CX = number of locks owned by specified SFT
  4839.                 BX = network machine number
  4840.                 DX destroyed
  4841.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  4842. -14h    DWORD    pointer to FAR routine for updating FCB from SFT???
  4843.         call with DS:SI -> unopened FCB
  4844.               ES:DI -> system file table entry
  4845.         Return: BL = C0h???
  4846.         Note: copies following fields from SFT to FCB:
  4847.            starting cluster of file      0Bh     1Ah
  4848.            sharing record offset      33h     1Ch
  4849.            file attribute          04h     1Eh
  4850. -10h    DWORD    pointer to FAR routine to get first cluster of FCB file ???
  4851.         call with ES:DI -> system file table entry
  4852.               DS:SI -> FCB
  4853.         Return: CF set if SFT closed or sharing record offsets
  4854.                 mismatched
  4855.             CF clear if successful
  4856.                 BX = starting cluster number from FCB
  4857. -0Ch    DWORD    pointer to FAR routine to close file if duplicate for process
  4858.         DS:SI -> system file table
  4859.         Return: AX = number of handle in JFT which already uses SFT
  4860.         Note: called during open/create of a file
  4861.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  4862.         Note: if SFT was opened with inheritance enabled and sharing
  4863.             mode 111, does something to all other SFTs owned by
  4864.             same process which have the same file open mode and
  4865.             sharing record
  4866. -08h    DWORD    pointer to FAR routine for ???
  4867.         Note: SHARE assumes SS=DS=DOS DS, direct-accesses DOS internals
  4868.         Note: closes various handles referring to file most-recently
  4869.             opened
  4870. -04h    DWORD    pointer to FAR routine to update directory info in related SFT
  4871.           entries
  4872.         call with ES:DI -> system file table entry for file (see below)
  4873.               AX = subfunction (apply to each related SFT)
  4874.                 00h: update time stamp (offset 0Dh) and date
  4875.                      stamp (offset 0Fh)
  4876.                 01h: update file size (offset 11h) and starting
  4877.                      cluster (offset 0Bh).  Sets last-accessed
  4878.                      cluster fields to start of file if file
  4879.                      never accessed
  4880.                 02h: as function 01h, but last-accessed fields
  4881.                      always changed
  4882.                 03h: do both functions 00h and 02h
  4883.         Note: follows ptr at offset 2Bh in system file table entries
  4884.         Note: NOP if opened with no-inherit or via FCB
  4885.  
  4886. Format of sharing record:
  4887. Offset    Size    Description
  4888.  00h    BYTE    flag
  4889.         00h free block
  4890.         01h allocated block
  4891.         FFh end marker
  4892.  01h    WORD    size of block
  4893.  03h    BYTE    checksum of pathname (including NUL)
  4894.         if sum of ASCII values is N, checksum is (N/256 + N%256)
  4895.  04h    WORD    offset in SHARE's DS of lock record (see below)
  4896.  06h    DWORD    pointer to start of system file table chain for file
  4897.  0Ah    WORD    unique sequence number
  4898.  0Ch    var    ASCIZ full pathname
  4899.  
  4900. Format of SHARE.EXE lock record:
  4901. Offset    Size    Description
  4902.  00h    WORD    offset in SHARE's DS of next lock table in list
  4903.  02h    DWORD    offset in file of start of locked region
  4904.  06h    DWORD    offset in file of end of locked region
  4905.  0Ah    DWORD    pointer to System File Table entry for this file
  4906.  0Eh    WORD    PSP segment of lock's owner
  4907.  
  4908. Format of DOS 2.x system file tables:
  4909. Offset    Size    Description
  4910.  00h    DWORD    pointer to next file table
  4911.  04h    WORD    number of files in this table
  4912.  06h  28h bytes per file
  4913.     Offset    Size    Description
  4914.      00h    BYTE    number of file handles referring to this file
  4915.      01h    BYTE    file open mode (see AH=3Dh)
  4916.      02h    BYTE    file attribute
  4917.      03h    BYTE    drive (0 = character device, 1 = A, 2 = B, etc)
  4918.      04h 11 BYTEs    filename in FCB format (no path,no period,blank-padded)
  4919.      0Fh    WORD    ???
  4920.      11h    WORD    ???
  4921.      13h    DWORD    file size???
  4922.      17h    WORD    file date in packed format (see AX=5700h)
  4923.      19h    WORD    file time in packed format (see AX=5700h)
  4924.      1Bh    BYTE    device attribute (see AX=4400h)
  4925.     ---character device---
  4926.      1Ch    DWORD    pointer to device driver
  4927.     ---block device---
  4928.      1Ch    WORD    starting cluster of file
  4929.      1Eh    WORD    relative cluster in file of last cluster accessed
  4930.     ------
  4931.      20h    WORD    absolute cluster number of current cluster
  4932.      22h    WORD    ???
  4933.      24h    DWORD    current file position???
  4934.  
  4935. Format of DOS 3.0 system file tables and FCB tables:
  4936. Offset    Size    Description
  4937.  00h    DWORD    pointer to next file table
  4938.  04h    WORD    number of files in this table
  4939.  06h  38h bytes per file
  4940.     Offset    Size    Description
  4941.      00h-1Eh as for DOS 3.1+ (see below)
  4942.      1Fh    WORD    byte offset of directory entry within sector
  4943.      21h 11 BYTES    filename in FCB format (no path/period, blank-padded)
  4944.      2Ch    DWORD    (SHARE.EXE) pointer to previous SFT sharing same file
  4945.      30h    WORD    (SHARE.EXE) ??? network machine number
  4946.      32h    WORD    PSP segment of file's owner
  4947.      34h    WORD    (SHARE.EXE) offset in SHARE code seg of share record
  4948.      36h    WORD    ??? apparently always 0000h
  4949.  
  4950. Format of DOS 3.1-3.3x system file tables and FCB tables:
  4951. Offset    Size    Description
  4952.  00h    DWORD    pointer to next file table
  4953.  04h    WORD    number of files in this table
  4954.  06h  35h bytes per file
  4955.     Offset    Size    Description
  4956.      00h    WORD    number of file handles referring to this file
  4957.      02h    WORD    file open mode (see AH=3Dh)
  4958.             bit 15 set if this file opened via FCB
  4959.      04h    BYTE    file attribute (see AX=4301h)
  4960.      05h    WORD    device info word (see AX=4400h)
  4961.             bit 15 set if remote file
  4962.             bit 14 set means do not set file date/time on closing
  4963.             bit 12 set means don't inherit on EXEC
  4964.      07h    DWORD    pointer to device driver header if character device
  4965.             else pointer to DOS Drive Parameter Block (see AH=32h)
  4966.      0Bh    WORD    starting cluster of file
  4967.      0Dh    WORD    file time in packed format (see AX=5700h)
  4968.      0Fh    WORD    file date in packed format (see AX=5700h)
  4969.      11h    DWORD    file size
  4970.     ---system file table---
  4971.      15h    DWORD    current offset in file (may be larger than size of
  4972.             file; INT 21/AH=42h does not check new position)
  4973.     ---FCB table---
  4974.      15h    WORD    counter for last I/O to FCB
  4975.      17h    WORD    counter for last open of FCB
  4976.             (these are separate to determine the times of the
  4977.             latest I/O and open)
  4978.     ---
  4979.      19h    WORD    relative cluster within file of last cluster accessed
  4980.      1Bh    WORD    absolute cluster number of last cluster accessed
  4981.             0000h if file never read or written???
  4982.      1Dh    WORD    number of sector containing directory entry
  4983.      1Fh    BYTE    number of dir entry within sector (byte offset/32)
  4984.      20h 11 BYTEs    filename in FCB format (no path/period, blank-padded)
  4985.      2Bh    DWORD    (SHARE.EXE) pointer to previous SFT sharing same file
  4986.      2Fh    WORD    (SHARE.EXE) network machine number which opened file
  4987.      31h    WORD    PSP segment of file's owner (see AH=26h)
  4988.      33h    WORD    offset within SHARE.EXE code segment of 
  4989.             sharing record (see above)  0000h = none
  4990.  
  4991. Format of DOS 4.0-5.0 system file tables and FCB tables:
  4992. Offset    Size    Description
  4993.  00h    DWORD    pointer to next file table
  4994.  04h    WORD    number of files in this table
  4995.  06h  3Bh bytes per file
  4996.     Offset    Size    Description
  4997.      00h    WORD    number of file handles referring to this file
  4998.      02h    WORD    file open mode (see AH=3Dh)
  4999.             bit 15 set if this file opened via FCB
  5000.      04h    BYTE    file attribute (see AX=4301h)
  5001.      05h    WORD    device info word (see AX=4400h)
  5002.             bit 15 set if remote file
  5003.             bit 14 set means do not set file date/time on closing
  5004.             bit 13 set if named pipe
  5005.             bit 12 set if no inherit
  5006.             bit 11 set if network spooler
  5007.      07h    DWORD    pointer to device driver header if character device
  5008.             else pointer to DOS Drive Parameter Block (see AH=32h)
  5009.             or REDIR data
  5010.      0Bh    WORD    starting cluster of file
  5011.      0Dh    WORD    file time in packed format (see AX=5700h)
  5012.      0Fh    WORD    file date in packed format (see AX=5700h)
  5013.      11h    DWORD    file size
  5014.      15h    DWORD    current offset in file
  5015.     ---local file---
  5016.      19h    WORD    relative cluster within file of last cluster accessed
  5017.      1Bh    DWORD    number of sector containing directory entry
  5018.      1Fh    BYTE    number of dir entry within sector (byte offset/32)
  5019.     ---network redirector---
  5020.      19h    DWORD    pointer to REDIRIFS record
  5021.      1Dh  3 BYTEs    ???
  5022.     ------
  5023.      20h 11 BYTEs    filename in FCB format (no path/period, blank-padded)
  5024.      2Bh    DWORD    (SHARE.EXE) pointer to previous SFT sharing same file
  5025.      2Fh    WORD    (SHARE.EXE) network machine number which opened file
  5026.      31h    WORD    PSP segment of file's owner (see AH=26h)
  5027.      33h    WORD    offset within SHARE.EXE code segment of 
  5028.             sharing record (see above)  0000h = none
  5029.      35h    WORD    (local) absolute cluster number of last clustr accessed
  5030.             (redirector) ???
  5031.      37h    DWORD    pointer to IFS driver for file, 0000000h if native DOS
  5032.  
  5033. Format of current directory structure (CDS) (array, LASTDRIVE entries):
  5034. Offset    Size    Description
  5035.  00h 67 BYTEs    ASCIZ path in form X:\PATH (local) or \\MACH\PATH (network)
  5036.  43h    WORD    drive attributes (see also note below and AX=5F07h)
  5037.         bit 15: uses network redirector     \ invalid if 00, installable
  5038.             14: physical drive         / file system if 11
  5039.             13: JOIN'ed      \ path above is true path that would be
  5040.             12: SUBST'ed  / needed if not under SUBST or JOIN
  5041.  45h    DWORD    pointer to Drive Parameter Block for drive (see AH=32h)
  5042. ---local drives---
  5043.  49h    WORD    starting cluster of current directory
  5044.         0000h = root, FFFFh = never accessed
  5045.  4Bh    WORD    ??? seems to be FFFFh always
  5046.  4Dh    WORD    ??? seems to be FFFFh always
  5047. ---network drives---
  5048.  49h    DWORD    pointer to redirector or REDIRIFS record, or FFFFh:FFFFh
  5049.  4Dh    WORD    stored user data from INT 21/AX=5F03h???
  5050. ------
  5051.  4Fh    WORD    offset in current directory path of backslash corresponding to
  5052.           root directory for drive
  5053.         this value specifies how many characters to hide from the
  5054.           "CHDIR" and "GETDIR" calls; normally set to 2 to hide the
  5055.           drive letter and colon, SUBST, JOIN, and networks change it
  5056.           so that only the appropriate portion of the true path is
  5057.           visible to the user
  5058. ---DOS 4.x---
  5059.  51h    BYTE    ??? used by network
  5060.  52h    DWORD    pointer to IFS driver for this drive, 00000000h if native DOS
  5061.  56h    WORD    ???
  5062. Notes:    the path for invalid drives is normally set to X:\, but may be empty
  5063.       after JOIN x: /D in DR-DOS 5.0 or NET USE x: /D in older LAN versions
  5064.     normally, only one of bits 13&12 may be set together with bit 14, but
  5065.       DR-DOS 5.0 uses other combinations for bits 15-12: 0111 JOIN,
  5066.       0001 SUBST, 0101 ASSIGN
  5067.  
  5068. Format of DR-DOS 5.0-6.0 current directory structure entry (array):
  5069. Offset    Size    Description
  5070.  00h 67 BYTEs    ASCIZ pathname of actual root directory for this logical drive
  5071.  43h    WORD    drive attributes
  5072.         1000h SUBSTed drive
  5073.         3000h??? JOINed drive
  5074.         4000h physical drive
  5075.         5000h ASSIGNed drive
  5076.         7000h JOINed drive
  5077.  45h    BYTE    physical drive number (0=A:) if this logical drive is valid
  5078.  46h    BYTE    ??? apparently flags for JOIN and ASSIGN
  5079.  47h    WORD    cluster number of start of parent directory (0000h = root)
  5080.  49h    WORD    entry number of current directory in parent directory
  5081.  4Bh    WORD    cluster number of start of current directory
  5082.  4Dh  2 BYTEs    ??? apparently always 0001h
  5083.  4Fh    WORD    cluster number of SUBST/JOIN "root" directory
  5084.         0000h if physical root directory
  5085.  
  5086. Format of device driver header:
  5087. Offset    Size    Description
  5088.  00h    DWORD    pointer to next driver, offset=FFFFh if last driver
  5089.  04h    WORD    device attributes
  5090.         Character device:
  5091.            bit 15 set
  5092.            bit 14 IOCTL supported (see AH=44h)
  5093.            bit 13 (DOS 3+) output until busy supported
  5094.            bit 12 reserved
  5095.            bit 11 (DOS 3+) OPEN/CLOSE/RemMedia calls supported
  5096.            bits 10-8 reserved
  5097.            bit 7  (DOS 5+) Generic IOCTL check call supported (cmd 19h)
  5098.                 (see AX=4410h,AX=4411h)
  5099.            bit 6  (DOS 3.2+) Generic IOCTL call supported (command 13h)
  5100.                 (see AX=440Ch,AX=440Dh)
  5101.            bit 5  reserved
  5102.            bit 4  device is special (use INT 29 "fast console output")
  5103.            bit 3  device is CLOCK$ (all reads/writes use transfer
  5104.                 record described below)
  5105.            bit 2  device is NUL
  5106.            bit 1  device is standard output
  5107.            bit 0  device is standard input
  5108.         Block device:
  5109.            bit 15 clear
  5110.            bit 14 IOCTL supported
  5111.            bit 13 non-IBM format
  5112.            bit 12 reserved
  5113.            bit 11 (DOS 3+) OPEN/CLOSE/RemMedia calls supported
  5114.            bit 10 reserved
  5115.            bit 9  direct I/O not allowed???
  5116.               (set by DOS 3.3 DRIVER.SYS for "new" drives)
  5117.            bit 8  ??? set by DOS 3.3 DRIVER.SYS for "new" drives
  5118.            bit 7  (DOS 5+) Generic IOCTL check call supported (cmd 19h)
  5119.                 (see AX=4410h,AX=4411h)
  5120.            bit 6  (DOS 3.2+) Generic IOCTL call supported (command 13h)
  5121.                 implies support for commands 17h and 18h
  5122.                 (see AX=440Ch,AX=440Dh,AX=440Eh,AX=440Fh)
  5123.            bits 5-2 reserved
  5124.            bit 1   driver supports 32-bit sector addressing
  5125.            bit 0   reserved
  5126.  06h    WORD    device strategy entry point
  5127.         call with ES:BX -> request header (see INT 2F/AX=0802h)
  5128.  08h    WORD    device interrupt entry point
  5129. ---character device---
  5130.  0Ah  8 BYTEs    blank-padded character device name
  5131. ---block device---
  5132.  0Ah    BYTE    number of subunits (drives) supported by driver
  5133.  0Bh  7 BYTEs    unused
  5134. ---
  5135.  12h    WORD    (CD-ROM driver) reserved, must be 0000h
  5136.  14h    BYTE    (CD-ROM driver) drive letter (must initially be 00h)
  5137.  15h    BYTE    (CD-ROM driver) number of units
  5138.  16h  6 BYTEs    (CD-ROM driver) signature 'MSCDnn' where 'nn' is version 
  5139.             (currently '00')
  5140.  
  5141. Format of CLOCK$ transfer record:
  5142. Offset    Size    Description
  5143.  00h    WORD    number of days since 1-Jan-1980
  5144.  02h    BYTE    minutes
  5145.  03h    BYTE    hours
  5146.  04h    BYTE    hundredths of second
  5147.  05h    BYTE    seconds
  5148.  
  5149. Format of DOS 2.x disk buffer:
  5150. Offset    Size    Description
  5151.  00h    DWORD    pointer to next disk buffer, offset = FFFFh if last
  5152.         least-recently used buffer is first in chain
  5153.  04h    BYTE    drive (0=A, 1=B, etc), FFh if not in use
  5154.  05h  3 BYTEs    unused??? (seems always to be 00h 00h 01h)
  5155.  08h    WORD    logical sector number
  5156.  0Ah    BYTE    number of copies to write (1 for non-FAT sectors)
  5157.  0Bh    BYTE    sector offset between copies if multiple copies to be written
  5158.  0Ch    DWORD    pointer to DOS Drive Parameter Block (see AH=32h)
  5159.  10h        buffered data
  5160.  
  5161. Format of DOS 3.x disk buffer:
  5162. Offset    Size    Description
  5163.  00h    DWORD    pointer to next disk buffer, offset = FFFFh if last
  5164.         least-recently used buffer is first in chain
  5165.  04h    BYTE    drive (0=A,1=B, etc), FFh if not in use
  5166.  05h    BYTE    flags
  5167.         bit 7: ???
  5168.         bit 6: buffer dirty
  5169.         bit 5: buffer has been referenced
  5170.         bit 4: ???
  5171.         bit 3: sector in data area
  5172.         bit 2: sector in a directory, either root or subdirectory
  5173.         bit 1: sector in FAT
  5174.         bit 0: boot sector??? (guess)
  5175.  06h    WORD    logical sector number
  5176.  08h    BYTE    number of copies to write (1 for non-FAT sectors)
  5177.  09h    BYTE    sector offset between copies if multiple copies to be written
  5178.  0Ah    DWORD    pointer to DOS Drive Parameter Block (see AH=32h)
  5179.  0Eh    WORD    unused??? (almost always 0)
  5180.  10h        buffered data
  5181.  
  5182. Format of DOS 4.00 (pre UR 25066) disk buffer info:
  5183. Offset    Size    Description
  5184.  00h    DWORD    pointer to array of disk buffer hash chain heads (see below)
  5185.  04h    WORD    number of disk buffer hash chains (referred to as NDBCH below)
  5186.  06h    DWORD    pointer to lookahead buffer, zero if not present
  5187.  0Ah    WORD    number of lookahead sectors, else zero (the y in BUFFERS=x,y)
  5188.  0Ch    BYTE    00h if buffers in EMS (/X), FFh if not
  5189.  0Dh    WORD    EMS handle for buffers, zero if not in EMS
  5190.  0Fh    WORD    EMS physical page number used for buffers (usually 255)
  5191.  11h    WORD    ??? seems always to be 0001h
  5192.  13h    WORD    segment of EMS physical page frame
  5193.  15h    WORD    ??? seems always to be zero
  5194.  17h  4 WORDs    EMS partial page mapping information???
  5195.  
  5196. Format of DOS 4.01 (from UR 25066 Corrctive Services Disk on) disk buffer info:
  5197. Offset    Size    Description
  5198.  00h    DWORD    pointer to array of disk buffer hash chain heads (see below)
  5199.  04h    WORD    number of disk buffer hash chains (referred to as NDBCH below)
  5200.  06h    DWORD    pointer to lookahead buffer, zero if not present
  5201.  0Ah    WORD    number of lookahead sectors, else zero (the y in BUFFERS=x,y)
  5202.  0Ch    BYTE    01h, possibly to distinguish from pre-UR 25066 format
  5203.  0Dh    WORD    ??? EMS segment for BUFFERS (only with /XD)
  5204.  0Fh    WORD    ??? EMS physical page number of EMS seg above (only with /XD)
  5205.  11h    WORD    ??? EMS segment for ??? (only with /XD)
  5206.  13h    WORD    ??? EMS physical page number of above (only with /XD)
  5207.  15h    BYTE    ??? number of EMS page frames present (only with /XD)
  5208.  16h    WORD    segment of one-sector workspace buffer allocated in main memory
  5209.           if BUFFERS/XS or /XD options in effect, possibly to avoid DMA
  5210.           into EMS
  5211.  18h    WORD    EMS handle for buffers, zero if not in EMS
  5212.  1Ah    WORD    EMS physical page number used for buffers (usually 255)
  5213.  1Ch    WORD    ??? appears always to be 0001h
  5214.  1Eh    WORD    segment of EMS physical page frame
  5215.  20h    WORD    ??? appears always to be zero
  5216.  22h    BYTE    00h if /XS, 01h if /XD, FFh if BUFFERS not in EMS
  5217.  
  5218. Format of DOS 4.x disk buffer hash chain head (array, one entry per chain):
  5219. Offset    Size    Description
  5220.  00h    WORD    EMS logical page number in which chain is resident, -1 if not
  5221.         in EMS
  5222.  02h    DWORD    pointer to least recently used buffer header.  All buffers on
  5223.         this chain are in the same segment.
  5224.  06h    BYTE    number of dirty buffers on this chain
  5225.  07h    BYTE    reserved (00h)
  5226. Notes:    buffered disk sectors are assigned to chain N where N is the sector's
  5227.       address modulo NDBCH,     0 <= N <= NDBCH-1
  5228.     each chain resides completely within one EMS page
  5229.     this structure is in main memory even if buffers are in EMS
  5230.  
  5231. Format of DOS 4.0-5.0 disk buffer:
  5232. Offset    Size    Description
  5233.  00h    WORD    forward ptr, offset only, to next least recently used buffer
  5234.  02h    WORD    backward ptr, offset only
  5235.  04h    BYTE    drive (0=A,1=B, etc), FFh if not in use
  5236.  05h    BYTE    flags
  5237.         bit 7: remote buffer
  5238.         bit 6: buffer dirty
  5239.         bit 5: buffer has been referenced
  5240.         bit 4: search data buffer (only valid if remote buffer)
  5241.         bit 3: sector in data area
  5242.         bit 2: sector in a directory, either root or subdirectory
  5243.         bit 1: sector in FAT
  5244.         bit 0: reserved
  5245.  06h    DWORD    logical sector number
  5246.  0Ah    BYTE    number of copies to write
  5247.         for FAT sectors, same as number of FATs
  5248.         for data and directory sectors, usually 1
  5249.  0Bh    WORD    offset in sectors between copies to write for FAT sectors
  5250.  0Dh    DWORD    pointer to DOS Drive Parameter Block (see AH=32h)
  5251.  11h    WORD    buffer use count if remote buffer (see flags above)
  5252.  13h    BYTE    reserved
  5253.  14h        buffered data
  5254. Note:    for DOS 4.x, all buffered sectors which have the same hash value
  5255.       (computed as the sum of high and low words of the logical sector
  5256.       number divided by NDBCH) are on the same doubly-linked circular
  5257.       chain; for DOS 5.0, only a single circular chain exists.
  5258.     the links consist of offset addresses only, the segment being the same
  5259.       for all buffers in the chain.
  5260.  
  5261. Format of DOS 5.0 disk buffer info:
  5262. Offset    Size    Description
  5263.  00h    DWORD    pointer to least-recently-used buffer header (may be in HMA)
  5264.         (see above)
  5265.  04h    WORD    0000h (DOS 5 does not hash disk buffers, so offset 00h points
  5266.             directly at the only buffer chain)
  5267.  06h    DWORD    pointer to lookahead buffer, zero if not present
  5268.  0Ah    WORD    number of lookahead sectors, else zero (the y in BUFFERS=x,y)
  5269.  0Ch    BYTE    buffer location
  5270.         00h base memory, no workspace buffer
  5271.         01h HMA, workspace buffer in base memory
  5272.  0Dh    DWORD    pointer to one-segment workspace buffer in base memory
  5273.  11h  3 BYTEs    unused???
  5274.  14h    WORD    ???
  5275.  16h    BYTE    ??? apparently always 00h
  5276.  17h    BYTE    ??? apparently always FFh
  5277.  18h    BYTE    ??? apparently always 00h
  5278.  19h    BYTE    ??? apparently always 00h
  5279.  1Ah    WORD    ??? segment within HIMEM.SYS area when buffers are in HMA and
  5280.           UMBs are enabled???, else 0000h
  5281.  1Ch    BYTE    bit 0 set iff UMB MCB chain linked to normal MCB chain
  5282.  1Dh    WORD    ???
  5283.  1Fh    WORD    segment of first MCB in upper memory blocks or FFFFh if DOS
  5284.         memory chain in base 640K only (first UMB MCB usually at 9FFFh,
  5285.         locking out video memory with a DOS-owned memory block)
  5286.  21h    WORD    paragraph of start of most recent MCB chain search
  5287.  
  5288. Format of IFS driver list:
  5289. Offset    Size    Description
  5290.  00h    DWORD    pointer to next driver header
  5291.  04h  8 BYTEs    IFS driver name (blank padded), as used by FILESYS command
  5292.  0Ch  4 BYTEs    ???
  5293.  10h    DWORD    pointer to IFS utility function entry point (see below)
  5294.         call with ES:BX -> IFS request (see below)
  5295.  14h    WORD    offset in header's segment of driver entry point
  5296.     ???
  5297.  
  5298. Call IFS utility function entry point with:
  5299.     AH = 20h miscellaneous functions
  5300.         AL = 00h get date
  5301.         Return: CX = year
  5302.             DH = month
  5303.             DL = day
  5304.         AL = 01h get process ID and computer ID
  5305.         Return: BX = current PSP segment
  5306.             DX = active network machine number
  5307.         AL = 05h get file system info
  5308.         ES:DI -> 16-byte info buffer
  5309.         Return: buffer filled
  5310.             Offset    Size    Description
  5311.              00h  2 BYTEs    unused
  5312.              02h    WORD    number of SFTs (actually counts only
  5313.                     the first two file table arrays)
  5314.              04h    WORD    number of FCB table entries
  5315.              06h    WORD    number of proctected FCBs
  5316.              08h  6 BYTEs    unused
  5317.              0Eh    WORD    largest sector size supported
  5318.         AL = 06h get machine name
  5319.         ES:DI -> 18-byte buffer for name
  5320.         Return: buffer filled with name starting at offset 02h
  5321.         AL = 08h get sharing retry count
  5322.         Return: BX = sharing retry count
  5323.         AL = other
  5324.         Return: CF set
  5325.     AH = 21h get redirection state
  5326.         BH = type (03h disk, 04h printer)
  5327.         Return: BH = state (00h off, 01h on)
  5328.     AH = 22h ??? some sort of time calculation
  5329.         AL = 00h ???
  5330.             nonzero ???
  5331.     AH = 23h ??? some sort of time calculation
  5332.     AH = 24h compare filenames
  5333.         DS:SI -> first ASCIZ filename
  5334.         ES:DI -> second ASCIZ filename
  5335.         Return: ZF set if files are same ignoring case and / vs \
  5336.     AH = 25h normalize filename
  5337.         DS:SI -> ASCIZ filename
  5338.         ES:DI -> buffer for result
  5339.         Return: filename uppercased, forward slashes changed to backslashes
  5340.     AH = 26h get DOS stack
  5341.         Return: DS:SI -> top of stack
  5342.             CX = size of stack in bytes
  5343.     AH = 27h increment InDOS flag
  5344.     AH = 28h decrement InDOS flag
  5345. Note:    IFS drivers which do not wish to implement functions 20h or 24h-28h may
  5346.       pass them on to the default handler pointed at by [LoL+37h]
  5347.  
  5348. Format of IFS request block:
  5349. Offset    Size    Description
  5350.  00h    WORD    total size in bytes of request
  5351.  02h    BYTE    class of request
  5352.         02h ???
  5353.         03h redirection
  5354.         04h ???
  5355.         05h file access
  5356.         06h convert error code to string
  5357.         07h ???
  5358.  03h    WORD    returned DOS error code
  5359.  05h    BYTE    IFS driver exit status
  5360.         00h success
  5361.         01h ???
  5362.         02h ???
  5363.         03h ???
  5364.         04h ???
  5365.         FFh internal failure
  5366.  06h 16 BYTEs    ???
  5367. ---request class 02h---
  5368.  16h    BYTE    function code
  5369.         04h ???
  5370.  17h    BYTE    unused???
  5371.  18h    DWORD    pointer to ???
  5372.  1Ch    DWORD    pointer to ???
  5373.  20h  2 BYTEs    ???
  5374. ---request class 03h---
  5375.  16h    BYTE    function code
  5376.  17h    BYTE    ???
  5377.  18h    DWORD    pointer to ???
  5378.  1Ch    DWORD    pointer to ???
  5379.  22h    WORD    returned ???
  5380.  24h    WORD    returned ???
  5381.  26h    WORD    returned ???
  5382.  28h    BYTE    returned ???
  5383.  29h    BYTE    unused???
  5384. ---request class 04h---
  5385.  16h    DWORD    pointer to ???
  5386.  1Ah    DWORD    pointer to ???
  5387. ---request class 05h---
  5388.  16h    BYTE    function code
  5389.         01h flush disk buffers
  5390.         02h get disk space
  5391.         03h MKDIR
  5392.         04h RMDIR
  5393.         05h CHDIR
  5394.         06h delete file
  5395.         07h rename file
  5396.         08h search directory
  5397.         09h file open/create
  5398.         0Ah LSEEK
  5399.         0Bh read from file
  5400.         0Ch write to file
  5401.         0Dh lock region of file
  5402.         0Eh commit/close file
  5403.         0Fh get/set file attributes
  5404.         10h printer control
  5405.         11h ???
  5406.         12h process termination
  5407.         13h ???
  5408.     ---class 05h function 01h---
  5409.      17h  7    BYTEs    ???
  5410.      1Eh    DWORD    pointer to ???
  5411.      22h  4 BYTEs    ???
  5412.      26h    BYTE    ???
  5413.      27h    BYTE    ???
  5414.     ---class 05h function 02h---
  5415.      17h  7 BYTEs    ???
  5416.      1Eh    DWORD    pointer to ???
  5417.      22h  4 BYTEs    ???
  5418.      26h    WORD    returned total clusters
  5419.      28h    WORD    returned sectors per cluster
  5420.      2Ah    WORD    returned bytes per sector
  5421.      2Ch    WORD    returned available clusters
  5422.      2Eh    BYTE    returned ???
  5423.      2Fh    BYTE    ???
  5424.     ---class 05h functions 03h,04h,05h---
  5425.      17h  7 BYTEs    ???
  5426.      1Eh    DWORD    pointer to ???
  5427.      22h  4 BYTEs    ???
  5428.      26h    DWORD    pointer to directory name
  5429.     ---class 05h function 06h---
  5430.      17h  7 BYTEs    ???
  5431.      1Eh    DWORD    pointer to ???
  5432.      22h  4 BYTEs    ???
  5433.      26h    WORD    attribute mask
  5434.      28h    DWORD    pointer to filename
  5435.     ---class 05h function 07h---
  5436.      17h  7 BYTEs    ???
  5437.      1Eh    DWORD    pointer to ???
  5438.      22h  4 BYTEs    ???
  5439.      26h    WORD    attribute mask
  5440.      28h    DWORD    pointer to source filespec
  5441.      2Ch    DWORD    pointer to destination filespec
  5442.     ---class 05h function 08h---
  5443.      17h  7 BYTEs    ???
  5444.      1Eh    DWORD    pointer to ???
  5445.      22h  4 BYTEs    ???
  5446.      26h    BYTE    00h FINDFIRST
  5447.             01h FINDNEXT
  5448.      28h    DWORD    pointer to FindFirst search data + 01h if FINDNEXT
  5449.      2Ch    WORD    search attribute if FINDFIRST
  5450.      2Eh    DWORD    pointer to filespec if FINDFIRST
  5451.     ---class 05h function 09h---
  5452.      17h  7 BYTEs    ???
  5453.      1Eh    DWORD    pointer to ???
  5454.      22h    DWORD    pointer to IFS open file structure (see below)
  5455.      26h    WORD    ???  \ together, specify open vs. create, whether or
  5456.      28h    WORD    ???  / not to truncate
  5457.      2Ah  4 BYTEs    ???
  5458.      2Eh    DWORD    pointer to filename
  5459.      32h  4 BYTEs    ???
  5460.      36h    WORD    file attributes on call
  5461.             returned ???
  5462.      38h    WORD    returned ???
  5463.     ---class 05h function 0Ah---
  5464.      17h  7 BYTEs    ???
  5465.      1Eh    DWORD    pointer to ???
  5466.      22h    DWORD    pointer to IFS open file structure (see below)
  5467.      26h    BYTE    seek type (02h = from end)
  5468.      28h    DWORD    offset on call
  5469.             returned new absolute position
  5470.     ---class 05h functions 0Bh,0Ch---
  5471.      17h  7 BYTEs    ???
  5472.      1Eh    DWORD    pointer to ???
  5473.      22h    DWORD    pointer to IFS open file structure (see below)
  5474.      28h    WORD    number of bytes to transfer
  5475.             returned bytes actually transferred
  5476.      2Ah    DWORD    transfer address
  5477.     ---class 05h function 0Dh---
  5478.      17h  7 BYTEs    ???
  5479.      1Eh    DWORD    pointer to ???
  5480.      22h    DWORD    pointer to IFS open file structure (see below)
  5481.      26h    BYTE    file handle???
  5482.      27h    BYTE    unused???
  5483.      28h    WORD    ???
  5484.      2Ah    WORD    ???
  5485.      2Ch    WORD    ???
  5486.      2Eh    WORD    ???
  5487.     ---class 05h function 0Eh---
  5488.      17h  7 BYTEs    ???
  5489.      1Eh    DWORD    pointer to ???
  5490.      22h    DWORD    pointer to IFS open file structure (see below)
  5491.      26h    BYTE    00h commit file
  5492.             01h close file
  5493.      27h    BYTE    unused???
  5494.     ---class 05h function 0Fh---
  5495.      17h  7 BYTEs    ???
  5496.      1Eh    DWORD    pointer to ???
  5497.      22h  4 BYTEs    ???
  5498.      26h    BYTE    02h GET attributes
  5499.             03h PUT attributes
  5500.      27h    BYTE    unused???
  5501.      28h 12 BYTEs    ???
  5502.      34h    WORD    search attributes???
  5503.      36h    DWORD    pointer to filename
  5504.      3Ah    WORD    (GET) returned ??? 
  5505.      3Ch    WORD    (GET) returned ???
  5506.      3Eh    WORD    (GET) returned ???
  5507.      40h    WORD    (GET) returned ???
  5508.      42h    WORD    (PUT) new attributes
  5509.             (GET) returned attributes
  5510.     ---class 05h function 10h---
  5511.      17h  7 BYTEs    ???
  5512.      1Eh    DWORD    pointer to ???
  5513.      22h    DWORD    pointer to IFS open file structure (see below)
  5514.      26h    WORD    ???
  5515.      28h    DWORD    pointer to ???
  5516.      2Ch    WORD    ???
  5517.      2Eh    BYTE    ???
  5518.      2Fh    BYTE    subfunction
  5519.             01h get printer setup
  5520.             03h ???
  5521.             04h ???
  5522.             05h ???
  5523.             06h ???
  5524.             07h ???
  5525.             21h set printer setup
  5526.     ---class 05h function 11h---
  5527.      17h  7 BYTEs    ???
  5528.      1Eh    DWORD    pointer to ???
  5529.      22h    DWORD    pointer to IFS open file structure (see below)
  5530.      26h    BYTE    subfunction
  5531.      27h    BYTE    unused???
  5532.      28h    WORD    ???
  5533.      2Ah    WORD    ???
  5534.      2Ch    WORD    ???
  5535.      2Eh    BYTE    ???
  5536.      2Fh    BYTE    ???
  5537.     ---class 05h function 12h---
  5538.      17h 15 BYTEs    unused???
  5539.      26h    WORD    PSP segment
  5540.      28h    BYTE    type of process termination
  5541.      29h    BYTE    unused???
  5542.     ---class 05h function 13h---
  5543.      17h 15 BYTEs    unused???
  5544.      26h    WORD    PSP segment
  5545. ---request class 06h---
  5546.  16h    DWORD    returned pointer to string corresponding to error code at 03h
  5547.  1Ah    BYTE    returned ???
  5548.  1Bh    BYTE    unused
  5549. ---request class 07h---
  5550.  16h    DWORD    pointer to IFS open file structure (see below)
  5551.  1Ah    BYTE    ???
  5552.  1Bh    BYTE    unused???
  5553.  
  5554. Format of IFS open file structure:
  5555. Offset    Size    Description
  5556.  00h    WORD    ???
  5557.  02h    WORD    device info word
  5558.  04h    WORD    file open mode
  5559.  06h    WORD    ???
  5560.  08h    WORD    file attributes
  5561.  0Ah    WORD    owner's network machine number
  5562.  0Ch    WORD    owner's PSP segment
  5563.  0Eh    DWORD    file size
  5564.  12h    DWORD    current offset in file
  5565.  16h    WORD    file time
  5566.  18h    WORD    file date
  5567.  1Ah 11 BYTEs    filename in FCB format
  5568.  25h    WORD    ???
  5569.  27h    WORD    hash value of SFT address
  5570.         (low word of linear address + segment&F000h)
  5571.  29h  3 WORDs    network info from SFT
  5572.  2Fh    WORD    ???
  5573.  
  5574. Format of one item in DOS 4+ list of special program names:
  5575. Offset    Size    Description
  5576.  00h    BYTE    length of name (00h = end of list)
  5577.  01h  N BYTEs    name in format name.ext
  5578.  N    2 BYTEs    DOS version to return for program (major,minor)
  5579.         (see AH=30h,INT 2F/AX=122Fh)
  5580. ---DOS 4 only---
  5581.  N+2    BYTE    number of times to return fake version number (FFh = always)
  5582. Note:    if the name of the executable for the program making the DOS "get
  5583.       version" call matches one of the names in this list, DOS returns the
  5584.       specified version rather than the true version number
  5585. ----------215252-----------------------------
  5586. INT 21 - VIRUS - "516"/"Leapfrog" - INSTALLATION CHECK
  5587.     AX = 5252h
  5588. Return: BX = FFEEh if resident
  5589. SeeAlso: AX=4BFFh"Cascade",AX=58CCh
  5590. ----------2153-------------------------------
  5591. INT 21 - DOS 2+ internal - TRANSLATE BIOS PARAMETER BLOCK TO DRIVE PARAM BLOCK
  5592.     AH = 53h
  5593.     DS:SI -> BIOS Parameter Block (see below)
  5594.     ES:BP -> buffer for Drive Parameter Block (see AH=32h for format)
  5595. Return: ES:BP buffer filled
  5596. Note:    for DOS 3+, the cluster at which to start searching is set to 0000h
  5597.       and the number of free clusters is set to FFFFh (unknown)
  5598.  
  5599. Format of BIOS Parameter Block:
  5600. Offset    Size    Description
  5601.  00h    WORD    number of bytes per sector
  5602.  02h    BYTE    number of sectors per cluster
  5603.  03h    WORD    number of reserved sectors at start of disk
  5604.  05h    BYTE    number of FATs
  5605.  06h    WORD    number of entries in root directory
  5606.  08h    WORD    total number of sectors
  5607.         for DOS 4+, set to zero if partition >32M, then set DWORD at
  5608.           15h to actual number of sectors
  5609.  0Ah    BYTE    media ID byte
  5610.  0Bh    WORD    number of sectors per FAT
  5611. ---DOS 3+---
  5612.  0Dh    WORD    number of sectors per track
  5613.  0Fh    WORD    number of heads
  5614.  11h    DWORD    number of hidden sectors
  5615.  15h 11 BYTEs    reserved    
  5616. ---DOS 4+ ---
  5617.  15h    DWORD    total number of sectors if word at 08h contains zero
  5618.  19h  6 BYTEs    ???
  5619.  1Fh    WORD    number of cylinders
  5620.  21h    BYTE    device type
  5621.  22h    WORD    device attributes (removable or not, etc)
  5622. ----------2154-------------------------------
  5623. INT 21 - DOS 2+ - GET VERIFY FLAG
  5624.     AH = 54h
  5625. Return: AL = verify flag
  5626.         00h off
  5627.         01h on (all disk writes verified after writing)
  5628. SeeAlso: AH=2Eh
  5629. ----------2155-------------------------------
  5630. INT 21 - DOS 2+ internal - CREATE CHILD PSP
  5631.     AH = 55h
  5632.     DX = segment at which to create new PSP
  5633.     SI = (DOS 3+) value to place in memory size field at DX:[0002h]
  5634. Return: CF clear if successful
  5635.  
  5636. Notes:    creates a "child" PSP rather than making an exact copy of the current
  5637.       PSP; the new PSP's parent pointer is set to the current PSP and the
  5638.       reference count for each inherited file is incremented
  5639.     (DOS 2+) sets current PSP to DX
  5640.     (DOS 3+) marks "no inherit" file handles as closed in child PSP
  5641. SeeAlso: AH=26h,AH=50h
  5642. ----------2156-------------------------------
  5643. INT 21 - DOS 2+ - "RENAME" - RENAME FILE
  5644.     AH = 56h
  5645.     DS:DX -> ASCIZ filename of existing file (no wildcards, but see below)
  5646.     ES:DI -> ASCIZ new filename (no wildcards)
  5647.     CL = attribute mask (server call only, see below)
  5648. Return: CF clear if successful
  5649.     CF set on error
  5650.         AX = error code (02h,03h,05h,11h) (see AH=59h)
  5651. Notes:    allows move between directories on same logical volume
  5652.     does not set the archive attribute (see AX=4300h), which results in
  5653.       incremental backups not backing up the file under its new name
  5654.     open files should not be renamed
  5655.     (DOS 3+) allows renaming of directories
  5656.     (DOS 3.1+) wildcards are allowed if invoked via AX=5D00h, in which case
  5657.       error 12h (no more files) is returned on success, and both source and
  5658.       destination specs must be canonical (as returned by AH=60h).
  5659.       Wildcards in the destination are replaced by the corresponding char
  5660.       of each source file being renamed.  Under DOS 3.x, the call will fail
  5661.       if the destination wildcard is *.* or equivalent.  When invoked via
  5662.       AX=5D00h, only those files matching the attribute mask in CL are
  5663.       renamed.
  5664. SeeAlso: AH=17h,AX=4301h,AH=60h,AX=5D00h
  5665. ----------215700-----------------------------
  5666. INT 21 - DOS 2+ - GET FILE'S DATE AND TIME
  5667.     AX = 5700h
  5668.     BX = file handle
  5669. Return: CF clear if successful
  5670.         CX = file's time
  5671.         bits 15-11: hours (0-23)
  5672.              10-5:  minutes
  5673.               4-0:  seconds/2
  5674.         DX = file's date
  5675.         bits 15-9: year - 1980
  5676.               8-5: month
  5677.               4-0: day
  5678.     CF set on error
  5679.         AX = error code (01h,06h) (see AH=59h)
  5680. SeeAlso: AX=5701h
  5681. ----------215701-----------------------------
  5682. INT 21 - DOS 2+ - SET FILE'S DATE AND TIME
  5683.     AX = 5701h
  5684.     BX = file handle
  5685.     CX = new time (see AX=5700h)
  5686.     DX = new date (see AX=5700h)
  5687. Return: CF clear if successful
  5688.     CF set on error
  5689.         AX = error code (01h,06h) (see AH=59h)
  5690. SeeAlso: AX=5700h
  5691. ----------215702-----------------------------
  5692. INT 21 - DOS 4.x only - GET ???
  5693.     AX = 5702h
  5694.     BX = ??? (0000h through 0004h)
  5695.     DS:SI -> ???
  5696.     ES:DI -> result buffer
  5697.     CX = size of result buffer
  5698. Return: CX = size of returned data
  5699. SeeAlso: AX=5703h,AX=5704h
  5700. ----------215703-----------------------------
  5701. INT 21 - DOS 4.x only - GET ???
  5702.     AX = 5703h
  5703.     BX = file handle (only 0000h through 0004h valid)
  5704.     DS:SI -> ??? passed through to INT 2F/AX=112Dh
  5705.     ES:DI -> result buffer
  5706.     CX = size of result buffer
  5707. Return: CX = size of returned data
  5708.     ES:DI -> zero word (DOS 4.0) if CX >= 2 on entry
  5709. SeeAlso: AX=5702h,AX=5704h,INT 2F/AX=112Dh
  5710. ----------215704-----------------------------
  5711. INT 21 - DOS 4.x only - TRUNCATE OPEN FILE TO ZERO LENGTH
  5712.     AX = 5704h
  5713.     BX = file handle (only 0000h through 0004h valid)
  5714.     DS:SI -> ??? passed through to INT 2F/AX=112Dh
  5715.     ES:DI -> result buffer
  5716.     CX = size of result buffer
  5717. Return: CX = size of returned data
  5718.     ES:DI -> zero word (DOS 4.0) if CX >= 2 on entry
  5719. SeeAlso: AX=5702h,AX=5703h,INT 2F/AX=112Dh
  5720. ----------2158-------------------------------
  5721. INT 21 - DOS 3+ - GET OR SET MEMORY ALLOCATION STRATEGY
  5722.     AH = 58h
  5723.     AL = subfunction
  5724.         00h get allocation strategy
  5725.         Return: AX = current strategy
  5726.                 00h low memory first fit
  5727.                 01h low memory best fit
  5728.                 02h low memory last fit
  5729.              ---DOS 5.0---
  5730.                 40h high memory first fit
  5731.                 41h high memory best fit
  5732.                 42h high memory last fit
  5733.                 80h first fit, try high then low memory
  5734.                 81h best fit, try high then low memory
  5735.                 82h last fit, try high then low memory
  5736.         01h set allocation strategy
  5737.         BL = new allocation strategy (see above)
  5738.         BH = 0 (DOS 5.0)
  5739.         02h (DOS 5.0) get UMB link state
  5740.         Return: AL = 00h UMBs not part of DOS memory chain
  5741.                = 01h UMBs in DOS memory chain
  5742.         03h (DOS 5.0) set UMB link state
  5743.         BX = 0000h remove UMBs from DOS memory chain
  5744.            = 0001h add UMBs to DOS memory chain
  5745. Return: CF clear if successful
  5746.     CF set on error
  5747.         AX = error code (01h) (see AH=59h)
  5748. Notes:    the Set subfunction accepts any value in BL for DOS 3.x and 4.x;
  5749.       2 or greater means last fit
  5750.     the Get subfunction returns the last value set
  5751.     a program which changes the allocation strategy should restore it
  5752.       before terminating
  5753.     DR-DOS 3.41 reportedly reverses subfunctions 00h and 01h
  5754. SeeAlso: AH=48h,AH=49h,AH=4Ah,INT 2F/AX=4310h,INT 67/AH=3Fh
  5755. ----------2158CC-----------------------------
  5756. INT 21 - VIRUS - "1067"/"Headcrash" - INSTALLATION CHECK
  5757.     AX = 58CCh
  5758. Return: CF clear if resident
  5759. SeeAlso: AX=5252h,AX=6969h
  5760. ----------2159--BX0000-----------------------
  5761. INT 21 - DOS 3+ - GET EXTENDED ERROR INFORMATION
  5762.     AH = 59h
  5763.     BX = 0000h
  5764. Return: AX = extended error code (see below)
  5765.     BH = error class (see below)
  5766.     BL = recommended action (see below)
  5767.     CH = error locus (see below)
  5768.     CL, DX, SI, DI, BP, DS, and ES destroyed
  5769. Notes:    functions available under DOS 2.x map the true DOS 3+ error code into
  5770.       one supported under DOS 2.x
  5771.     you should call this function to retrieve the true error code when an
  5772.       FCB or DOS 2.x call returns an error
  5773. SeeAlso: AX=5D0Ah,INT 2F/AX=122Dh
  5774.  
  5775. Values for extended error code:
  5776.     00h no error
  5777.     01h function number invalid
  5778.     02h file not found
  5779.     03h path not found
  5780.     04h too many open files (no handles available)
  5781.     05h access denied
  5782.     06h invalid handle
  5783.     07h memory control block destroyed
  5784.     08h insufficient memory
  5785.     09h memory block address invalid
  5786.     0Ah environment invalid (usually >32K in length)
  5787.     0Bh format invalid
  5788.     0Ch access code invalid
  5789.     0Dh data invalid
  5790.     0Eh reserved
  5791.     0Fh invalid drive
  5792.     10h attempted to remove current directory
  5793.     11h not same device
  5794.     12h no more files
  5795. ---DOS 3+---
  5796.     13h disk write-protected
  5797.     14h unknown unit
  5798.     15h drive not ready
  5799.     16h unknown command
  5800.     17h data error (CRC)
  5801.     18h bad request structure length
  5802.     19h seek error
  5803.     1Ah unknown media type (non-DOS disk)
  5804.     1Bh sector not found
  5805.     1Ch printer out of paper
  5806.     1Dh write fault
  5807.     1Eh read fault
  5808.     1Fh general failure
  5809.     20h sharing violation
  5810.     21h lock violation
  5811.     22h disk change invalid
  5812.         ES:DI -> ASCIZ volume label of required disk
  5813.     23h FCB unavailable
  5814.     24h sharing buffer overflow
  5815.     25h (DOS 4+) code page mismatch
  5816.     26h (DOS 4+) cannot complete file operation (out of input)
  5817.     27h (DOS 4+) insufficient disk space
  5818.     28h-31h reserved
  5819.     32h network request not supported
  5820.     33h remote computer not listening
  5821.     34h duplicate name on network
  5822.     35h network name not found
  5823.     36h network busy
  5824.     37h network device no longer exists
  5825.     38h network BIOS command limit exceeded
  5826.     39h network adapter hardware error
  5827.     3Ah incorrect response from network
  5828.     3Bh unexpected network error
  5829.     3Ch incompatible remote adapter
  5830.     3Dh print queue full
  5831.     3Eh queue not full
  5832.     3Fh not enough space to print file
  5833.     40h network name was deleted
  5834.     41h network: Access denied
  5835.     42h network device type incorrect
  5836.     43h network name not found
  5837.     44h network name limit exceeded
  5838.     45h network BIOS session limit exceeded
  5839.     46h temporarily paused
  5840.     47h network request not accepted
  5841.     48h network print/disk redirection paused
  5842.     49h (LANtastic) invalid network version
  5843.     4Ah (LANtastic) account expired
  5844.     4Bh (LANtastic) password expired
  5845.     4Ch (LANtastic) login attempt invalid at this time
  5846.     4Dh (LANtastic v3+) disk limit exceeded on network node
  5847.     4Eh (LANtastic v3+) not logged in to network node
  5848.     4Fh reserved
  5849.     50h file exists
  5850.     51h reserved
  5851.     52h cannot make directory
  5852.     53h fail on INT 24h
  5853.     54h (DOS 3.3+) too many redirections
  5854.     55h (DOS 3.3+) duplicate redirection
  5855.     56h (DOS 3.3+) invalid password
  5856.     57h (DOS 3.3+) invalid parameter
  5857.     58h (DOS 3.3+) network write fault
  5858.     59h (DOS 4+) function not supported on network
  5859.     5Ah (DOS 4+) required system component not installed
  5860.  
  5861. Values for Error Class:
  5862.     01h out of resource (storage space or I/O channels)
  5863.     02h temporary situation (file or record lock)
  5864.     03h authorization (denied access)
  5865.     04h internal (system software bug)
  5866.     05h hardware failure
  5867.     06h system failure (configuration file missing or incorrect)
  5868.     07h application program error
  5869.     08h not found
  5870.     09h bad format
  5871.     0Ah locked
  5872.     0Bh media error
  5873.     0Ch already exists
  5874.     0Dh unknown
  5875.  
  5876. Values for Suggested Action:
  5877.     01h retry
  5878.     02h delayed retry
  5879.     03h prompt user to reenter input
  5880.     04h abort after cleanup
  5881.     05h immediate abort
  5882.     06h ignore
  5883.     07h retry after user intervention
  5884.  
  5885. Values for Error Locus:
  5886.     01h unknown or not appropriate
  5887.     02h block device (disk error)
  5888.     03h network related
  5889.     04h serial device (timeout)
  5890.     05h memory related
  5891. ----------215A-------------------------------
  5892. INT 21 - DOS 3+ - CREATE TEMPORARY FILE
  5893.     AH = 5Ah
  5894.     CX = file attribute (see AX=4301h)
  5895.     DS:DX -> ASCIZ path ending with a '\' + 13 zero bytes to receive the
  5896.         generated filename
  5897. Return: CF clear if successful
  5898.         AX = file handle opened for read/write in compatibility mode
  5899.         DS:DX pathname extended with generated name for temporary file
  5900.     CF set on error
  5901.         AX = error code (03h,04h,05h) (see AH=59h)
  5902. Notes:    creates a file with a unique name which must be explicitly deleted
  5903.     COMPAQ DOS 3.31 hangs if the pathname is at XXXXh:0000h; it apparently
  5904.       wraps around to the end of the segment
  5905. SeeAlso: AH=3Ch,AH=5Bh
  5906. ----------215B-------------------------------
  5907. INT 21 - DOS 3+ - CREATE NEW FILE
  5908.     AH = 5Bh
  5909.     CX = file attribute (see AX=4301h)
  5910.     DS:DX -> ASCIZ filename
  5911. Return: CF clear if successful
  5912.         AX = file handle opened for read/write in compatibility mode
  5913.     CF set on error
  5914.         AX = error code (03h,04h,05h,50h) (see AH=59h)
  5915. Notes:    unlike AH=3Ch, this function will fail if the specified file exists
  5916.       rather than truncating it; this permits its use in creating semaphore
  5917.       files because it is an atomic "test and set" operation
  5918. SeeAlso: AH=3Ch,AH=5Ah
  5919. ----------215C-------------------------------
  5920. INT 21 - DOS 3+ - "FLOCK" - RECORD LOCKING
  5921.     AH = 5Ch
  5922.     AL = subfunction
  5923.         00h lock region of file
  5924.         01h unlock region of file
  5925.     BX = file handle
  5926.     CX:DX = start offset of region within file
  5927.     SI:DI = length of region in bytes
  5928. Return: CF clear if successful
  5929.     CF set on error
  5930.         AX = error code (01h,06h,21h,24h) (see AH=59h)
  5931. Notes:    error returned unless SHARE or network installed
  5932.     an unlock call must specify the same region as some prior lock call
  5933.     locked regions become entirely inaccessible to other processes
  5934.     duplicate handles created with AH=45h or AH=46h inherit locks, but
  5935.       handles inherited by child processes (see AH=4Bh) do not
  5936. SeeAlso: AX=440Bh,INT 2F/AX=110Ah,INT 2F/AX=110Bh
  5937. ----------215D00-----------------------------
  5938. INT 21 - DOS 3.1+ internal - SERVER FUNCTION CALL
  5939.     AX = 5D00h
  5940.     DS:DX -> DOS parameter list (see below)
  5941.     DPL contains all register values for a call to INT 21h
  5942. Return: as appropriate for function being called
  5943. Notes:    does not check AH.  Out of range values will crash the system
  5944.     executes using specified computer ID and process ID
  5945.     sharing delay loops skipped
  5946.     a special sharing mode is enabled
  5947.     wildcards are enabled for DELETE (AH=41h) and RENAME (AH=56h)
  5948.     an extra file attribute parameter is enabled for OPEN (AH=3Dh),
  5949.       DELETE (AH=41h), and RENAME (AH=56h)
  5950.     functions which take filenames require canonical names (as returned
  5951.       by AH=60h); this is apparently to prevent multi-hop file forwarding
  5952. SeeAlso: AH=3Dh,AH=41h,AH=56h,AH=60h
  5953.  
  5954. Format of DOS parameter list:
  5955. Offset    Size    Description
  5956.  00h    WORD    AX 
  5957.  02h    WORD    BX
  5958.  04h    WORD    CX
  5959.  06h    WORD    DX
  5960.  08h    WORD    SI
  5961.  0Ah    WORD    DI
  5962.  0Ch    WORD    DS
  5963.  0Eh    WORD    ES
  5964.  10h    WORD    reserved (0)
  5965.  12h    WORD    computer ID (0 = current system)
  5966.  14h    WORD    process ID (PSP segment on specified computer)
  5967. ----------215D01-----------------------------
  5968. INT 21 - DOS 3.1+ internal - COMMIT ALL FILES FOR SPECIFIED COMPUTER/PROCESS
  5969.     AX = 5D01h
  5970.     DS:DX -> DOS parameter list (see AX=5D00h), only computer ID and
  5971.         process ID fields used
  5972. Return: CF set on error
  5973.         AX = error code (see AH=59h)
  5974.     CF clear if successful
  5975. Notes:    flushes buffers and updates directory entries for each file which has
  5976.       been written to; if remote file, calls INT 2F/AX=1107h
  5977.     the computer ID and process ID are stored but ignored under DOS 3.3
  5978. SeeAlso: AH=0Dh,AH=68h,INT 2F/AX=1107h
  5979. ----------215D02-----------------------------
  5980. INT 21 - DOS 3.1+ internal - SHARE.EXE - CLOSE FILE BY NAME
  5981.     AX = 5D02h
  5982.     DS:DX -> DOS parameter list (see AX=5D00h), only fields DX, DS,
  5983.         computer ID, and process ID used
  5984.     DPL's DS:DX -> ASCIZ name of file to close
  5985. Return: CF set on error
  5986.         AX = error code (see AH=59h)
  5987.     CF clear if successful
  5988. Notes:    error unless SHARE is loaded (calls [SysFileTable-28h]) (see AH=52h)
  5989.     name must be canonical fully-qualified, such as returned by AH=60h
  5990. SeeAlso: AX=5D03h,AX=5D04h,AH=3Eh,AH=60h
  5991. ----------215D03-----------------------------
  5992. INT 21 - DOS 3.1+ internal - SHARE.EXE - CLOSE ALL FILES FOR GIVEN COMPUTER
  5993.     AX = 5D03h
  5994.     DS:DX -> DOS parameter list (see AX=5D00h), only computer ID used
  5995. Return: CF set on error
  5996.         AX = error code (see AH=59h)
  5997.     CF clear if successful
  5998. Note:    error unless SHARE is loaded (calls [SysFileTable-30h]) (see AH=52h)
  5999. SeeAlso: AX=5D02h,AX=5D04h
  6000. ----------215D04-----------------------------
  6001. INT 21 - DOS 3.1+ internal - SHARE.EXE - CLOSE ALL FILES FOR GIVEN PROCESS
  6002.     AX = 5D04h
  6003.     DS:DX -> DOS parameter list (see AX=5D00h), only computer ID and
  6004.         process ID fields used
  6005. Return: CF set on error
  6006.         AX = error code (see AH=59h)
  6007.     CF clear if successful
  6008. Note:    error unless SHARE is loaded (calls [SysFileTable-2Ch]) (see AH=52h)
  6009. SeeAlso: AX=5D02h,AX=5D03h
  6010. ----------215D05-----------------------------
  6011. INT 21 - DOS 3.1+ internal - SHARE.EXE - GET OPEN FILE LIST ENTRY
  6012.     AX = 5D05h
  6013.     DS:DX -> DOS parameter list (see AX=5D00h)
  6014.     DPL's BX = index of sharing record (see AH=52h)
  6015.     DPL's CX = index of SFT in sharing record's SFT list
  6016. Return: CF clear if successful
  6017.         ES:DI -> ASCIZ filename
  6018.         BX = network machine number of SFT's owner
  6019.         CX = number of locks held by SFT's owner
  6020.     CF set if either index out of range
  6021.         AX = 0012h (no more files)
  6022. Notes:    error unless SHARE is loaded (calls [SysFileTable-18h]) (see AH=52h)
  6023.     names are always canonical fully-qualified, such as returned by AH=60h
  6024. SeeAlso: AH=5Ch,AH=60h 
  6025. ----------215D06-----------------------------
  6026. INT 21 - DOS 3.0+ internal - GET ADDRESS OF DOS SWAPPABLE DATA AREA
  6027.     AX = 5D06h
  6028. Return: CF set on error
  6029.        AX = error code (see AH=59h)
  6030.     CF clear if successful
  6031.         DS:SI -> nonreentrant data area (includes all three DOS stacks)
  6032.         (critical error flag is first byte)
  6033.         CX = size in bytes of area which must be swapped while in DOS
  6034.         DX = size in bytes of area which must always be swapped
  6035. Notes:    the Critical Error flag is used in conjunction with the InDOS flag
  6036.       (see AH=34h) to determine when it is safe to enter DOS from a TSR
  6037.     setting CritErr flag allows use of functions 50h/51h from INT 28h under
  6038.       DOS 2.x by forcing use of correct stack
  6039.     swapping the data area allows reentering DOS unless DOS is in a
  6040.       critical section delimited by INT 2A/AH=80h and INT 2A/AH=81h,82h
  6041.     under DOS 4.0, AX=5D0Bh should be used instead of this function
  6042. SeeAlso: AX=5D0Bh,INT 2A/AH=80h,INT 2A/AH=81h,INT 2A/AH=82h
  6043.  
  6044. Format of DOS 3.10-3.30 Swappable Data Area:
  6045. Offset    Size    Description
  6046.  00h    BYTE    critical error flag
  6047.  01h    BYTE    InDOS flag (count of active INT 21 calls)
  6048.  02h    BYTE    drive on which current critical error occurred, or FFh
  6049.  03h    BYTE    locus of last error
  6050.  04h    WORD    extended error code of last error
  6051.  06h    BYTE    suggested action for last error
  6052.  07h    BYTE    class of last error
  6053.  08h    DWORD    ES:DI pointer for last error
  6054.  0Ch    DWORD    current DTA
  6055.  10h    WORD    current PSP
  6056.  12h    WORD    stores SP across an INT 23
  6057.  14h    WORD    return code from last process termination (zerod after reading
  6058.         with AH=4Dh)
  6059.  16h    BYTE    current drive
  6060.  17h    BYTE    extended break flag
  6061. ---remainder need only be swapped if in DOS---
  6062.  18h    WORD    value of AX on call to INT 21
  6063.  1Ah    WORD    PSP segment for sharing/network
  6064.  1Ch    WORD    network machine number for sharing/network (0000h = us)
  6065.  1Eh    WORD    first usable memory block found when allocating memory
  6066.  20h    WORD    best usable memory block found when allocating memory
  6067.  22h    WORD    last usable memory block found when allocating memory
  6068.  24h    WORD    memory size in paragraphs (used only during initialization)
  6069.  26h    WORD    ???
  6070.  28h    BYTE    INT 24 returned Fail
  6071.  29h    BYTE    bit flags for allowable actions on INT 24
  6072.  2Ah    BYTE    ??? flag
  6073.  2Bh    BYTE    FFh if Ctrl-Break termination, 00h otherwise
  6074.  2Ch    BYTE    ??? flag of some kind
  6075.  2Dh    BYTE    ??? (doesn't seem to be referenced)
  6076.  2Eh    BYTE    day of month
  6077.  2Fh    BYTE    month
  6078.  30h    WORD    year - 1980
  6079.  32h    WORD    number of days since 1-1-1980
  6080.  34h    BYTE    day of week (0 = Sunday)
  6081.  35h    BYTE    working SFT pointer at SDA+2AAh is valid ???
  6082.  36h    BYTE    safe to call INT 28 if nonzero
  6083.  37h    BYTE    flag: if nonzero, INT 24 abort turned into INT 24 fail
  6084.         (set only during process termination)
  6085.  38h 26 BYTEs    device driver request header
  6086.  52h    DWORD    pointer to device driver entry point (used in calling driver)
  6087.  56h 22 BYTEs    device driver request header
  6088.  6Ch 22 BYTEs    device driver request header
  6089.  82h    BYTE    type of PSP copy (00h=simple for INT 21/AH=26h, FFh=make child)
  6090.  83h    BYTE    ??? apparently not referenced by kernel
  6091.  84h  3 BYTEs    24-bit user number (see AH=30h)
  6092.  87h    BYTE    OEM number (see AH=30h)
  6093.  88h  2 BYTEs    ???
  6094.  8Ah  6 BYTEs    CLOCK$ transfer record (see AH=52h)
  6095.  90h    BYTE    ??? buffer for single-byte I/O functions
  6096.  91h    BYTE    ??? apparently not referenced by kernel
  6097.  92h 128 BYTEs    buffer for filename
  6098. 112h 128 BYTEs    buffer for filename
  6099. 192h 21 BYTEs    findfirst/findnext search data block (see AH=4Eh)
  6100. 1A7h 32 BYTEs    directory entry for found file
  6101. 1C7h 81 BYTEs    copy of current directory structure for drive being accessed
  6102. 218h 11 BYTEs    FCB-format filename for device name comparison
  6103. 223h    BYTE    unused???
  6104. 224h 11 BYTEs    wildcard destination specification for rename (FCB format)
  6105. 22Fh  2 BYTEs    ???
  6106. 231h    WORD    ???
  6107. 233h  5 BYTEs    ???
  6108. 238h    BYTE    extended FCB file attribute
  6109. 239h    BYTE    type of FCB (00h regular, FFh extended)
  6110. 23Ah    BYTE    directory search attributes
  6111. 23Bh    BYTE    file open mode???
  6112. 23Ch    BYTE    ??? flag bits 0 and 4
  6113. 23Dh    BYTE    ??? flag or counter
  6114. 23Eh    BYTE    ??? flag
  6115. 23Fh    BYTE    flag indicating how DOS function was invoked
  6116.         (00h = direct INT 20/INT 21, FFh = server call AX=5D00h)
  6117. 240h    BYTE    ???
  6118. 241h    BYTE    ??? flag
  6119. 242h    BYTE    flag: 00h if read, 01h if write
  6120. 243h    BYTE    drive number for ???
  6121. 244h    BYTE    ???
  6122. 245h    BYTE    ??? flag or counter
  6123. 246h    BYTE    line edit (AH=0Ah) insert mode flag (nonzero = on)
  6124. 247h    BYTE    canonicalized filename referred to existing file/dir if FFh
  6125. 248h    BYTE    ??? flag or counter
  6126. 249h    BYTE    type of process termination (00h-03h) (see AH=4Dh)
  6127. 24Ah    BYTE    ??? flag
  6128. 24Bh    BYTE    value with which to replace first byte of deleted file's name
  6129.         (normally E5h, but 00h as described under INT 21/AH=13h)
  6130. 24Ch    DWORD    pointer to Drive Parameter Block for critical error invocation
  6131. 250h    DWORD    pointer to stack frame containing user registers on INT 21
  6132. 254h    WORD    stores SP across INT 24
  6133. 256h    DWORD    pointer to DOS Drive Parameter Block for ???
  6134. 25Ah    WORD    ???
  6135. 25Ch    WORD    ??? temp
  6136. 25Eh    WORD    ??? flag (only low byte referenced)
  6137. 260h    WORD    ??? temp
  6138. 262h    BYTE    Media ID byte returned by AH=1Bh,1Ch
  6139. 263h    BYTE    ??? (doesn't seem to be referenced)
  6140. 264h    DWORD    pointer to device header
  6141. 268h    DWORD    pointer to current SFT
  6142. 26Ch    DWORD    pointer to current directory structure for drive being accessed
  6143. 270h    DWORD    pointer to caller's FCB
  6144. 274h    WORD    number of SFT to which file being opened will refer
  6145. 276h    WORD    temporary storage for file handle
  6146. 278h    DWORD    pointer to a JFT entry in process handle table (see AH=26h)
  6147. 27Ch    WORD    offset in DOS DS of first filename argument
  6148. 27Eh    WORD    offset in DOS DS of second filename argument
  6149. 280h    WORD    offset of last component in pathname or FFFFh
  6150. 282h    WORD    ??? offset of transfer address???
  6151. 284h    WORD    ??? relative cluster within file being accessed ???
  6152. 286h    WORD    ??? absolute cluster number being accessed ???
  6153. 288h    WORD    ??? current sector number
  6154. 28Ah    WORD    ??? current cluster number
  6155. 28Ch    WORD    ??? current offset in file DIV bytes per sector
  6156. 28Eh  2 BYTEs    ??? 
  6157. 290h    WORD    ??? current offset in file MOD bytes per sector
  6158. 292h    DWORD    current offset in file
  6159. 296h    WORD    ???
  6160. 298h    WORD    ???
  6161. 29Ah    WORD    ???
  6162. 29Ch    WORD    ???
  6163. 29Eh    WORD    ???
  6164. 2A0h    WORD    ???
  6165. 2A2h    DWORD    number of bytes appended to file
  6166. 2A6h    DWORD    pointer to ??? disk buffer
  6167. 2AAh    DWORD    pointer to working SFT
  6168. 2AEh    WORD    used by INT 21 dispatcher to store caller's BX
  6169. 2B0h    WORD    used by INT 21 dispatcher to store caller's DS
  6170. 2B2h    WORD    temporary storage while saving/restoring caller's registers
  6171. 2B4h    DWORD    pointer to prev call frame (offset 250h) if INT 21 reentered
  6172.         also switched to for duration of INT 24
  6173. 2B8h 21 BYTEs    FindFirst search data for source file(s) of a rename operation
  6174.         (see AH=4Eh)
  6175. 2CDh 32 BYTEs    directory entry for file being renamed
  6176. 2EDh 331 BYTEs    critical error stack
  6177.    403h     35 BYTEs scratch SFT
  6178. 438h 384 BYTEs    disk stack (functions greater than 0Ch, INT 25,INT 26)
  6179. 5B8h 384 BYTEs    character I/O stack (functions 01h through 0Ch)
  6180. ---DOS 3.2,3.3 only---
  6181. 738h    BYTE    device driver lookahead flag (see AH=64h)
  6182. 739h    BYTE    ??? looks like a drive number
  6183. 73Ah    BYTE    ??? flag of some kind
  6184. 73Ah    BYTE    ???
  6185. ----------215D07-----------------------------
  6186. INT 21 - DOS 3.1+ network - GET REDIRECTED PRINTER MODE
  6187.     AX = 5D07h
  6188. Return: DL = mode
  6189.         00h redirected output is combined
  6190.         01h redirected output in separate print jobs
  6191. SeeAlso: AX=5D08h,AX=5D09h,INT 2F/AX=1125h
  6192. ----------215D08-----------------------------
  6193. INT 21 - DOS 3.1+ network - SET REDIRECTED PRINTER MODE
  6194.     AX = 5D08h
  6195.     DL = mode
  6196.         00h redirected output is combined
  6197.         01h redirected output placed in separate jobs, start new print job
  6198.         now
  6199. SeeAlso: AX=5D07h,AX=5D09h,INT 2F/AX=1125h
  6200. ----------215D09-----------------------------
  6201. INT 21 - DOS 3.1+ network - FLUSH REDIRECTED PRINTER OUTPUT
  6202.     AX = 5D09h
  6203. Note:    forces redirected printer output to be printed, and starts a new print
  6204.       job
  6205. SeeAlso: AX=5D07h,AX=5D08h,INT 2F/AX=1125h
  6206. ----------215D0A-----------------------------
  6207. INT 21 - DOS 3.1+ - SET EXTENDED ERROR INFORMATION
  6208.     AX = 5D0Ah
  6209.     DS:DX -> 11-word DOS parameter list (see AX=5D00h)
  6210. Return: nothing.  next call to AH=59h will return values from fields AX,BX,CX,
  6211.       DX,DI, and ES in corresponding registers
  6212. Note:    documented for DOS 5+, but undocumented in earlier versions
  6213. SeeAlso: AH=59h
  6214. ----------215D0B-----------------------------
  6215. INT 21 - DOS 4.x only internal - GET DOS SWAPPABLE DATA AREAS
  6216.     AX = 5D0Bh
  6217. Return: CF set on error
  6218.         AX = error code (see AH=59h)
  6219.     CF clear if successful
  6220.         DS:SI -> swappable data area list (see below)
  6221. Note:    copying and restoring the swappable data areas allows DOS to be
  6222.       reentered unless it is in a critical section delimited by calls to
  6223.       INT 2A/AH=80h and INT 2A/AH=81h,82h
  6224. SeeAlso: AX=5D06h,INT 2A/AH=80h,INT 2A/AH=81h,INT 2A/AH=82h
  6225.  
  6226. Format of DOS 4.x swappable data area list:
  6227. Offset    Size    Description
  6228.  00h    WORD    count of data areas
  6229.  02h  N BYTEs    "count" copies of data area record
  6230.         Offset    Size    Description
  6231.          00h    DWORD    address
  6232.          04h    WORD    length and type
  6233.                 bit 15 set if swap always, clear if swap in DOS
  6234.                 bits 14-0: length in bytes
  6235.  
  6236. Format of DOS 4.0-5.0 swappable data area:
  6237. Offset    Size    Description
  6238.  00h    BYTE    critical error flag
  6239.  01h    BYTE    InDOS flag (count of active INT 21 calls)
  6240.  02h    BYTE    drive on which current critical error occurred or FFh
  6241.  03h    BYTE    locus of last error
  6242.  04h    WORD    extended error code of last error
  6243.  06h    BYTE    suggested action for last error
  6244.  07h    BYTE    class of last error
  6245.  08h    DWORD    ES:DI pointer for last error
  6246.  0Ch    DWORD    current DTA
  6247.  10h    WORD    current PSP
  6248.  12h    WORD    stores SP across an INT 23
  6249.  14h    WORD    return code from last process termination (zerod after reading
  6250.         with AH=4Dh)
  6251.  16h    BYTE    current drive
  6252.  17h    BYTE    extended break flag
  6253.  18h  2 BYTEs    ???
  6254. ---remainder need only be swapped if in DOS---
  6255.  1Ah    WORD    value of AX on call to INT 21
  6256.  1Ch    WORD    PSP segment for sharing/network
  6257.  1Eh    WORD    network machine number for sharing/network (0000h = us)
  6258.  20h    WORD    first usable memory block found when allocating memory
  6259.  22h    WORD    best usable memory block found when allocating memory
  6260.  24h    WORD    last usable memory block found when allocating memory
  6261.  26h    WORD    memory size in paragraphs (used only during initialization)
  6262.  28h    WORD    ???
  6263.  2Ah    BYTE    ???
  6264.  2Bh    BYTE    ???
  6265.  2Ch    BYTE    ???
  6266.  2Dh    BYTE    ???
  6267.  2Eh    BYTE    ???
  6268.  2Fh    BYTE    ??? (doesn't seem to be referenced)
  6269.  30h    BYTE    day of month
  6270.  31h    BYTE    month
  6271.  32h    WORD    year - 1980
  6272.  34h    WORD    number of days since 1-1-1980
  6273.  36h    BYTE    day of week (0 = Sunday)
  6274.  37h    BYTE    ???
  6275.  38h    BYTE    ???
  6276.  39h    BYTE    ???
  6277.  38h 30 BYTEs    device driver request header
  6278.  58h    DWORD    pointer to device driver entry point (used in calling driver)
  6279.  5Ch 22 BYTEs    device driver request header
  6280.  72h 30 BYTEs    device driver request header
  6281.  90h  6    BYTEs    ???
  6282.  96h  6 BYTEs    CLOCK$ transfer record (see AH=52h)
  6283.  9Ch  2 BYTEs    ???
  6284.  9Eh 128 BYTEs    buffer for filename
  6285. 11Eh 128 BYTEs    buffer for filename
  6286. 19Eh 21 BYTEs    findfirst/findnext search data block (see AH=4Eh)
  6287. 1B3h 32 BYTEs    directory entry for found file
  6288. 1D3h 88 BYTEs    copy of current directory structure for drive being accessed
  6289. 22Bh 11 BYTEs    FCB-format filename for device name comparison
  6290. 236h    BYTE    ???
  6291. 237h 11 BYTEs    wildcard destination specification for rename (FCB format)
  6292. 242h  2 BYTEs    ???
  6293. 244h    WORD    ???
  6294. 246h  5 BYTEs    ???
  6295. 24Bh    BYTE    extended FCB file attributes
  6296. 24Ch    BYTE    type of FCB (00h regular, FFh extended)
  6297. 24Dh    BYTE    directory search attributes
  6298. 24Eh    BYTE    file open mode
  6299. 24Fh    BYTE    ??? flag bits
  6300. 250h    BYTE    ??? flag or counter
  6301. 251h    BYTE    ??? flag
  6302. 252h    BYTE    flag indicating how DOS function was invoked
  6303.         (00h = direct INT 20/INT 21, FFh = server call AX=5D00h)
  6304. 253h    BYTE    ???
  6305. 254h    BYTE    ???
  6306. 255h    BYTE    ???
  6307. 256h    BYTE    ???
  6308. 257h    BYTE    ???
  6309. 258h    BYTE    ???
  6310. 259h    BYTE    ???
  6311. 25Ah    BYTE    canonicalized filename referred to existing file/dir if FFh
  6312. 25Bh    BYTE    ???
  6313. 25Ch    BYTE    type of process termination (00h-03h)
  6314. 25Dh    BYTE    ???
  6315. 25Eh    BYTE    ???
  6316. 25Fh    BYTE    ???
  6317. 260h    DWORD    pointer to Drive Parameter Block for critical error invocation
  6318. 264h    DWORD    pointer to stack frame containing user registers on INT 21
  6319. 268h    WORD    stores SP???
  6320. 26Ah    DWORD    pointer to DOS Drive Parameter Block for ???
  6321. 26Eh    WORD    segment of disk buffer
  6322. 270h    WORD    ???
  6323. 272h    WORD    ???
  6324. 274h    WORD    ???
  6325. 276h    WORD    ???
  6326. 278h    BYTE    Media ID byte returned by AH=1Bh,1Ch
  6327. 279h    BYTE    ??? (doesn't seem to be referenced)
  6328. 27Ah    DWORD    pointer to ???
  6329. 27Eh    DWORD    pointer to current SFT
  6330. 282h    DWORD    pointer to current directory structure for drive being accessed
  6331. 286h    DWORD    pointer to caller's FCB
  6332. 28Ah    WORD    number of SFT to which file being opened will refer
  6333. 28Ch    WORD    temporary storage for file handle
  6334. 28Eh    DWORD    pointer to a JFT entry in process handle table (see AH=26h)
  6335. 292h    WORD    offset in DOS DS of first filename argument
  6336. 294h    WORD    offset in DOS DS of second filename argument
  6337. 296h    WORD    ???
  6338. 298h    WORD    ???
  6339. 29Ah    WORD    ???
  6340. 29Ch    WORD    ???
  6341. 29Eh    WORD    ???
  6342. 2A0h    WORD    ???
  6343. 2A2h    WORD    ??? directory cluster number???
  6344. 2A4h    DWORD    ???
  6345. 2A8h    DWORD    ???
  6346. 2ACh    WORD    ???
  6347. 2AEh    DWORD    offset in file???
  6348. 2B2h    WORD    ???
  6349. 2B4h    WORD    bytes in partial sector
  6350. 2B6h    WORD    number of sectors
  6351. 2B8h    WORD    ???
  6352. 2BAh    WORD    ???
  6353. 2BCh    WORD    ???
  6354. 2BEh    DWORD    number of bytes appended to file
  6355. 2C2h    DWORD    pointer to ??? disk buffer
  6356. 2C6h    DWORD    pointer to ??? SFT
  6357. 2CAh    WORD    used by INT 21 dispatcher to store caller's BX
  6358. 2CCh    WORD    used by INT 21 dispatcher to store caller's DS
  6359. 2CEh    WORD    temporary storage while saving/restoring caller's registers
  6360. 2D0h    DWORD    pointer to prev call frame (offset 264h) if INT 21 reentered
  6361.         also switched to for duration of INT 24
  6362. 2D4h    WORD    open mode/action for INT 21/AX=6C00h
  6363. 2D6h    BYTE    ??? (set to 00h by INT 21h dispatcher, 02h when a read is
  6364.         performed, and 01h or 03h by INT 21/AX=6C00h)
  6365. 2D7h    WORD    ??? apparently unused
  6366. 2D9h    DWORD    stored ES:DI for AX=6C00h
  6367. 2DDh    WORD    extended file open action code (see AX=6C00h)
  6368. 2DFh    WORD    extended file open attributes (see AX=6C00h)
  6369. 2E1h    WORD    extended file open file mode (see AX=6C00h)
  6370. 2E3h    DWORD    pointer to filename to open (see AX=6C00h)
  6371. 2E7h    WORD    ???
  6372. 2E9h    WORD    ???
  6373. 2EBh    BYTE    ???
  6374. 2ECh    WORD    stores DS during call to [List-of-Lists + 37h]
  6375. 2EEh    WORD    ???
  6376. 2F0h    BYTE    ???
  6377. 2F1h    WORD    ??? bit flags
  6378. 2F3h    DWORD    pointer to user-supplied filename
  6379. 2F7h    DWORD    pointer to ???
  6380. 2FBh    WORD    stores SS during call to [List-of-Lists + 37h]
  6381. 2FDh    WORD    stores SP during call to [List-of-Lists + 37h]
  6382. 2FFh    BYTE    flag, nonzero if stack switched in calling [List-of-Lists+37h]
  6383. 300h 21 BYTEs    FindFirst search data for source file(s) of a rename operation
  6384.         (see AH=4Eh)
  6385. 315h 32 BYTEs    directory entry for file being renamed
  6386. 335h 331 BYTEs    critical error stack
  6387. 480h 384 BYTEs    disk stack (functions greater than 0Ch, INT 25,INT 26)
  6388. 600h 384 BYTEs    character I/O stack (functions 01h through 0Ch)
  6389. 780h    BYTE    device driver lookahead flag (see AH=64h)
  6390. 781h    BYTE    ??? looks like a drive number
  6391. 782h    BYTE    ??? flag of some kind
  6392. 783h    BYTE    ???
  6393. 784h    WORD    ???
  6394. 786h    WORD    ???
  6395. 788h    WORD    ???
  6396. 78Ah    WORD    ???
  6397. ----------215E00-----------------------------
  6398. INT 21 - DOS 3.1+ network - GET MACHINE NAME
  6399.     AX = 5E00h
  6400.     DS:DX -> 16-byte buffer for ASCIZ machine name
  6401. Return: CF clear if successful
  6402.         CH = validity
  6403.         00h name invalid
  6404.         nonzero valid
  6405.             CL = NetBIOS number for machine name
  6406.             DS:DX buffer filled with blank-paded name
  6407.     CF set on error
  6408.         AX = error code (01h) (see AH=59h)
  6409. Note:    supported by OS/2 v1.3+ compatibility box, PC-NFS
  6410. SeeAlso: AX=5E01h
  6411. ----------215E01CH00-------------------------
  6412. INT 21 - DOS 3.1+ network - SET MACHINE NAME
  6413.     AX = 5E01h
  6414.     CH = 00h undefine name (make it invalid)
  6415.        <> 0     define name
  6416.     CL = name number
  6417.     DS:DX -> 15-character blank-padded ASCIZ name
  6418. SeeAlso: AX=5E00h
  6419. ----------215E02-----------------------------
  6420. INT 21 - DOS 3.1+ network - SET NETWORK PRINTER SETUP STRING
  6421.     AX = 5E02h
  6422.     BX = redirection list index (see AX=5F02h)
  6423.     CX = length of setup string
  6424.     DS:SI -> setup string
  6425. Return: CF clear if successful
  6426.     CF set on error
  6427.         AX = error code (01h) (see AH=59h)
  6428. SeeAlso: AX=5E03h,INT 2F/AX=111Fh
  6429. ----------215E03-----------------------------
  6430. INT 21 - DOS 3.1+ network - GET NETWORK PRINTER SETUP STRING
  6431.     AX = 5E03h
  6432.     BX = redirection list index (see AX=5F02h)
  6433.     ES:DI -> 64-byte buffer for setup string
  6434. Return: CF clear if successful
  6435.         CX = length of setup string
  6436.         ES:DI buffer filled
  6437.     CF set on error
  6438.         AX = error code (01h) (see AH=59h)
  6439. SeeAlso: AX=5E02h,INT 2F/AX=111Fh
  6440. ----------215E04-----------------------------
  6441. INT 21 - DOS 3.1+ network - SET PRINTER MODE
  6442.     AX = 5E04h
  6443.     BX = redirection list index (see AX=5F02h)
  6444.     DX = mode
  6445.         bit 0: set if binary, clear if text (tabs expanded to blanks)
  6446. Return: CF set on error
  6447.         AX = error code (see AH=59h)
  6448.     CF clear if successful
  6449. Note:    calls INT 2F/AX=111Fh with 5E04h on stack
  6450. SeeAlso: AX=5E05h,INT 2F/AX=111Fh
  6451. ----------215E05-----------------------------
  6452. INT 21 - DOS 3.1+ network - GET PRINTER MODE
  6453.     AX = 5E05h
  6454.     BX = redirection list index (see AX=5F02h)
  6455. Return: CF set on error
  6456.         AX = error code (see AH=59h)
  6457.     CF clear if successful
  6458.         DX = printer mode (see AX=5E04h)
  6459. Note:    calls INT 2F/AX=111Fh with 5E05h on stack
  6460. SeeAlso: AX=5E04h,INT 2F/AX=111Fh
  6461. ----------215F00-----------------------------
  6462. INT 21 - DOS 3.1+ network - GET REDIRECTION MODE
  6463.     AX = 5F00h
  6464.     BL = redirection type
  6465.         03h printer
  6466.         04h disk drive
  6467. Return: CF set on error
  6468.         AX = error code (see AH=59h)
  6469.     CF clear if successful
  6470.         BH = redirection state
  6471.         00h off
  6472.         01h on
  6473. SeeAlso: AX=5F01h
  6474. ----------215F01-----------------------------
  6475. INT 21 - DOS 3.1+ network - SET REDIRECTION MODE
  6476.     AX = 5F01h
  6477.     BL = redirection type
  6478.         03h printer
  6479.         04h disk drive
  6480.     BH = redirection state
  6481.         00h off
  6482.         01h on
  6483. Return: CF set on error
  6484.         AX = error code (see AH=59h)
  6485.     CF clear if successful
  6486. Note:    when redirection is off, the local device (if any) rather than the
  6487.       remote device is used
  6488. SeeAlso: AX=5F00h,INT 2F/AX=111Eh
  6489. ----------215F02-----------------------------
  6490. INT 21 - DOS 3.1+ network, Banyan VINES, PC-NFS - GET REDIRECTION LIST ENTRY
  6491.     AX = 5F02h
  6492.     BX = redirection list index
  6493.     DS:SI -> 16-byte buffer for ASCIZ device name
  6494.     ES:DI -> 128-byte buffer for ASCIZ network name
  6495. Return: CF clear if successful
  6496.         BH = device status
  6497.         00h valid
  6498.         01h invalid
  6499.         BL = device type
  6500.         03h printer
  6501.         04h disk drive
  6502.         CX = user data previously set with AX=5F03h
  6503.         DS:SI and ES:DI buffers filled
  6504.         DX,BP destroyed
  6505.     CF set on error
  6506.         AX = error code (01h,12h) (see AH=59h)
  6507. Notes:    this function is passed through to INT 2F/AX=111Eh
  6508.     error code 12h is returned if BX is greater than the size of the list
  6509. SeeAlso: AX=5F03h,INT 2F/AX=111Eh
  6510. ----------215F03-----------------------------
  6511. INT 21 - DOS 3.1+ network, Banyan VINES - REDIRECT DEVICE
  6512.     AX = 5F03h
  6513.     BL = device type
  6514.         03h printer
  6515.         04h disk drive
  6516.     CX = user data to save
  6517.     DS:SI -> ASCIZ local device name (16 bytes max)
  6518.     ES:DI -> ASCIZ network name + ASCIZ password (128 bytes max total)
  6519. Return: CF clear if successful
  6520.     CF set on error
  6521.         AX = error code (01h,03h,05h,08h,0Fh,12h) (see AH=59h)
  6522. Note:    if device type is disk drive, DS:SI must point at either a null string
  6523.       or a string consisting the drive letter followed by a colon; if a
  6524.       null string, the network attempts to access the destination without
  6525.       redirecting a local drive
  6526. SeeAlso: AX=5F02h,AX=5F04h,INT 2F/AX=111Eh
  6527. ----------215F04-----------------------------
  6528. INT 21 - DOS 3.1+ network, Banyan VINES - CANCEL REDIRECTION
  6529.     AX = 5F04h
  6530.     DS:SI -> ASCIZ device name or path
  6531. Return: CF clear if successful
  6532.     CF set on error
  6533.         AX = error code (01h,03h,05h,08h,0Fh,12h) (see AH=59h)
  6534. Note:    the DS:SI string must be either a local device name, a drive letter
  6535.       followed by a colon, or a network directory beginning with two
  6536.       backslashes
  6537. SeeAlso: AX=5F03h,INT 2F/AX=111Eh
  6538. ----------215F05-----------------------------
  6539. INT 21 - DOS 4.x + Microsoft Networks - GET REDIRECTION LIST EXTENDED ENTRY
  6540.     AX = 5F05h
  6541.     BX = redirection list index
  6542.     DS:SI -> buffer for ASCIZ source device name
  6543.     ES:DI -> buffer for destination ASCIZ network path
  6544. Return: CF set on error
  6545.         AX = error code (see AH=59h)
  6546.     CF clear if successful
  6547.         BH = device status flag (bit 0 clear if valid)
  6548.         BL = device type (03h if printer, 04h if drive)
  6549.         CX = stored parameter value (user data)
  6550.         BP = NETBIOS local session number
  6551.         DS:SI buffer filled
  6552.         ES:DI buffer filled
  6553. Notes:    the local session number allows sharing the redirector's session number
  6554.     if an error is caused on the NETBIOS LSN, the redirector may be unable
  6555.       to correctly recover from errors
  6556. SeeAlso: AX=5F06h"Network",INT 2F/AX=111Eh
  6557. ----------215F05-----------------------------
  6558. INT 21 - STARLITE architecture - MAP LOCAL DRIVE LETTER TO REMOTE FILE SYSTEM
  6559.     AX = 5F05h
  6560.     DL = drive number (0=A:)
  6561.     DS:SI -> ASCIZ name of the object to map the drive to
  6562. Return: CF set on error
  6563.         AX = error code (see AH=59h)
  6564.     CF clear if successful
  6565. SeeAlso: AX=5F06h"STARLITE"
  6566. ----------215F06-----------------------------
  6567. INT 21 - Network - GET REDIRECTION LIST???
  6568.     AX = 5F06h
  6569.     ???
  6570. Return: ???
  6571. Note:    appears to be similar to AX=5F02h and AX=5F05h
  6572. SeeAlso: AX=5F05h"DOS",INT 2F/AX=111Eh
  6573. ----------215F06-----------------------------
  6574. INT 21 - STARLITE architecture - UNMAP DRIVE LETTER
  6575.     AX = 5F06h
  6576.     DL = drive to be unmapped (0=A:)
  6577. Return: CF set on error
  6578.         AX = error code (see AH=59h)
  6579.     CF clear if successful
  6580. SeeAlso: AX=5F05h"STARLITE"
  6581. ----------215F07-----------------------------
  6582. INT 21 - DOS 5.0 - ENABLE DRIVE
  6583.     AX = 5F07h
  6584.     DL = drive number (0=A:)
  6585. Return: CF clear if successful
  6586.     CF set on error
  6587.         AX = error code (0Fh) (see AH=59h)
  6588. Note:    simply sets the "valid" bit in the drive's CDS
  6589. SeeAlso: AH=52h,AX=5F08h"DOS"
  6590. ----------215F07-----------------------------
  6591. INT 21 - STARLITE architecture - MAKE NAMED OBJECT AVAILABLE ON NETWORK
  6592.     AX = 5F07h
  6593.     DS:SI -> ASCIZ name of object to offer to network
  6594.     ES:DI -> ASCIZ name under which object will be known on the network
  6595.         MUST begin with three slashes
  6596. Return: CF set on error
  6597.         AX = error code (see AH=59h)
  6598.     CF clear if successful
  6599. SeeAlso: AX=5F08h"STARLITE"
  6600. ----------215F08-----------------------------
  6601. INT 21 - DOS 5.0 - DISABLE DRIVE
  6602.     AX = 5F08h
  6603.     DL = drive number (0=A:)
  6604. Return: CF clear if successful
  6605.     CF set on error
  6606.         AX = error code (0Fh) (see AH=59h)
  6607. Note:    simply clears the "valid" bit in the drive's CDS
  6608. SeeAlso: AH=52h,AX=5F07h"DOS"
  6609. ----------215F08-----------------------------
  6610. INT 21 - STARLITE architecture - REMOVE GLOBAL NETWORK NAME OF OBJECT
  6611.     AX = 5F08h
  6612.     DS:SI -> ASCIZ network name (not local name) of object to unshare
  6613. Return: CF set on error
  6614.         AX = error code (see AH=59h)
  6615.     CF clear if successful
  6616. SeeAlso: AX=5F07h"STARLITE"
  6617. ----------215F09-----------------------------
  6618. INT 21 - STARLITE architecture - BIND TO NETWORK DEVICE
  6619.     AX = 5F09h
  6620.     DS:DX -> ASCIZ name of the device driver to attach to
  6621. Return: CF set on error
  6622.         AX = error code (see AH=59h)
  6623.     CF clear if successful
  6624. Note:    the STARLITE distributed file system can attach to multiple networks
  6625.       simultaneously
  6626. SeeAlso: AX=5F0Ah
  6627. ----------215F0A-----------------------------
  6628. INT 21 - STARLITE architecture - DETACH FROM NETWORK DEVICE
  6629.     AX = 5F0Ah
  6630.     DS:DX -> ASCIZ name of device driver to detach from
  6631. Return: CF set on error
  6632.         AX = error code (see AH=59h)
  6633.     CF clear if successful
  6634. SeeAlso: AX=5F09h
  6635. ----------215F32-----------------------------
  6636. INT 21 - LAN Manager Enhanced DOS API local interface - DosQNmPipeInfo
  6637.     AX = 5F32h
  6638.     ???
  6639. Return: ???
  6640. SeeAlso: AX=5F33h,AX=5F34h
  6641. ----------215F33-----------------------------
  6642. INT 21 - LAN Manager Enhanced DOS API local interface - DosQNmPHandState
  6643.     AX = 5F33h
  6644.     ???
  6645. Return: ???
  6646. SeeAlso: AX=5F32h,AX=5F34h
  6647. ----------215F34-----------------------------
  6648. INT 21 - LAN Manager Enhanced DOS API local interface - DosSetNmPHandState
  6649.     AX = 5F34h
  6650.     ???
  6651. Return: ???
  6652. SeeAlso: AX=5F32h,AX=5F33h,AX=5F36h
  6653. ----------215F35-----------------------------
  6654. INT 21 - LAN Manager Enhanced DOS API local interface - DosPeekNmPipe
  6655.     AX = 5F35h
  6656.     ???
  6657. Return: ???
  6658. SeeAlso: AX=5F38h,AX=5F39h,AX=5F51h
  6659. ----------215F36-----------------------------
  6660. INT 21 - LAN Manager Enhanced DOS API local interface - DosTransactNmPipe
  6661.     AX = 5F36h
  6662.     ???
  6663. Return: ???
  6664. SeeAlso: AX=5F34h,AX=5F37h
  6665. ----------215F37-----------------------------
  6666. INT 21 - LAN Manager Enhanced DOS API local interface - DosCallNmPipe
  6667.     AX = 5F37h
  6668.     ???
  6669. Return: ???
  6670. SeeAlso: AX=5F36h,AX=5F38h
  6671. ----------215F38-----------------------------
  6672. INT 21 - LAN Manager Enhanced DOS API local interface - DosWaitNmPipe
  6673.     AX = 5F38h
  6674.     ???
  6675. Return: ???
  6676. SeeAlso: AX=5F37h,AX=5F39h
  6677. ----------215F39-----------------------------
  6678. INT 21 - LAN Manager Enhanced DOS API local interface - DosRawReadNmPipe
  6679.     AX = 5F39h
  6680.     ???
  6681. Return: ???
  6682. SeeAlso: AX=5F35h,AX=5F3Ah,INT 2F/AX=1186h
  6683. ----------215F3A-----------------------------
  6684. INT 21 - LAN Manager Enhanced DOS API local interface - DosRawWriteNmPipe
  6685.     AX = 5F3Ah
  6686.     ???
  6687. Return: ???
  6688. SeeAlso: AX=5F3Bh,INT 2F/AX=118Fh
  6689. ----------215F3B-----------------------------
  6690. INT 21 - LAN Manager Enhanced DOS API local interface - NetHandleSetInfo
  6691.     AX = 5F3Bh
  6692.     ???
  6693. Return: ???
  6694. SeeAlso: AX=5F3Ch
  6695. ----------215F3C-----------------------------
  6696. INT 21 - LAN Manager Enhanced DOS API local interface - NetHandleGetInfo
  6697.     AX = 5F3Ch
  6698.     ???
  6699. Return: ???
  6700. SeeAlso: AX=5F3Bh
  6701. ----------215F40-----------------------------
  6702. INT 21 - LAN Manager Enhanced DOS API local interface - NetMessageBufferSend
  6703.     AX = 5F40h
  6704.     ???
  6705. Return: ???
  6706. ----------215F42-----------------------------
  6707. INT 21 - LAN Manager Enhanced DOS API local interface - NetServiceControl
  6708.     AX = 5F42h
  6709.     ???
  6710. Return: ???
  6711. ----------215F44-----------------------------
  6712. INT 21 - LAN Manager Enhanced DOS API local interface - NetWkstaGetInfo
  6713.     AX = 5F44h
  6714.     ???
  6715. Return: ???
  6716. SeeAlso: AX=5F45h,AX=5F49h
  6717. ----------215F45-----------------------------
  6718. INT 21 - LAN Manager Enhanced DOS API local interface - NetWkstaSetInfo
  6719.     AX = 5F45h
  6720.     ???
  6721. Return: ???
  6722. SeeAlso: AX=5F44h
  6723. ----------215F46-----------------------------
  6724. INT 21 - LAN Manager Enhanced DOS API local interface - NetUseEnum
  6725.     AX = 5F46h
  6726.     ???
  6727. Return: ???
  6728. SeeAlso: AX=5F47h,AX=5F48h,AX=5F4Ch
  6729. ----------215F47-----------------------------
  6730. INT 21 - LAN Manager Enhanced DOS API local interface - NetUseAdd
  6731.     AX = 5F47h
  6732.     ???
  6733. Return: ???
  6734. SeeAlso: AX=5F46h,AX=5F48h
  6735. ----------215F48-----------------------------
  6736. INT 21 - LAN Manager Enhanced DOS API local interface - NetUseDel
  6737.     AX = 5F48h
  6738.     ???
  6739. Return: ???
  6740. SeeAlso: AX=5F46h,AX=5F48h,AX=5F49h
  6741. ----------215F49-----------------------------
  6742. INT 21 - LAN Manager Enhanced DOS API local interface - NetUseGetInfo
  6743.     AX = 5F49h
  6744.     ???
  6745. Return: ???
  6746. SeeAlso: AX=5F44h,AX=5F47h
  6747. ----------215F4A-----------------------------
  6748. INT 21 - LAN Manager Enhanced DOS API local interface - NetRemoteCopy
  6749.     AX = 5F4Ah
  6750.     ???
  6751. Return: ???
  6752. SeeAlso: AX=5F4Bh
  6753. ----------215F4B-----------------------------
  6754. INT 21 - LAN Manager Enhanced DOS API local interface - NetRemoteMove
  6755.     AX = 5F4Bh
  6756.     ???
  6757. Return: ???
  6758. SeeAlso: AX=5F4Ah
  6759. ----------215F4C-----------------------------
  6760. INT 21 - LAN Manager Enhanced DOS API local interface - NetServerEnum
  6761.     AX = 5F4Ch
  6762.     ???
  6763. Return: ???
  6764. SeeAlso: AX=5F53h
  6765. ----------215F4D-----------------------------
  6766. INT 21 - LAN Manager Enhanced DOS API local interface - DosMakeMailslot
  6767.     AX = 5F4Dh
  6768.     ???
  6769. Return: ???
  6770. SeeAlso: AX=5F4Eh,AX=5F4Fh,AX=5F50h,AX=5F51h
  6771. ----------215F4E-----------------------------
  6772. INT 21 - LAN Manager Enhanced DOS API local interface - DosDeleteMailslot
  6773.     AX = 5F4Eh
  6774.     ???
  6775. Return: ???
  6776. SeeAlso: AX=5F4Dh,AX=5F4Fh
  6777. ----------215F4F-----------------------------
  6778. INT 21 - LAN Manager Enhanced DOS API local interface - DosMailslotInfo
  6779.     AX = 5F4Fh
  6780.     ???
  6781. Return: ???
  6782. SeeAlso: AX=5F4Dh,AX=5F4Eh,AX=5F50h
  6783. ----------215F50-----------------------------
  6784. INT 21 - LAN Manager Enhanced DOS API local interface - DosReadMailslot
  6785.     AX = 5F50h
  6786.     ???
  6787. Return: ???
  6788. SeeAlso: AX=5F4Dh,AX=5F4Fh,AX=5F51h,AX=5F52h
  6789. ----------215F51-----------------------------
  6790. INT 21 - LAN Manager Enhanced DOS API local interface - DosPeekMailslot
  6791.     AX = 5F51h
  6792.     ???
  6793. Return: ???
  6794. SeeAlso: AX=5F35h,AX=5F4Fh,AX=5F50h,AX=5F52h
  6795. ----------215F52-----------------------------
  6796. INT 21 - LAN Manager Enhanced DOS API local interface - DosWriteMailslot
  6797.     AX = 5F52h
  6798.     ???
  6799. Return: ???
  6800. SeeAlso: AX=5F4Fh,AX=5F50h,AX=5F51h
  6801. ----------215F53-----------------------------
  6802. INT 21 - LAN Manager Enhanced DOS API local interface - NetServerEnum2
  6803.     AX = 5F53h
  6804.     ???
  6805. Return: ???
  6806. SeeAlso: AX=5F4Ch
  6807. ----------215F80-----------------------------
  6808. INT 21 - LANtastic - GET LOGIN ENTRY
  6809.     AX = 5F80h
  6810.     BX = login entry index (0-based)
  6811.     ES:DI -> 16-byte buffer for machine name
  6812. Return: CF clear if successful
  6813.         buffer filled with machine name ("\\" prefix removed)
  6814.         DL = adapter number (v3+)
  6815.     CF set on error
  6816.         AX = error code
  6817.     BX = next login entry index (BX-1 is current index)
  6818. ----------215F81-----------------------------
  6819. INT 21 - LANtastic - LOGIN TO SERVER
  6820.     AX = 5F81h
  6821.     ES:DI -> ASCIZ login path followed immediately by ASCIZ password
  6822.     BL = adapter number
  6823.         FFh try all valid adapters
  6824.         00h-03h try only specified adapter
  6825. Return: CF clear if successful
  6826.     CF set on error
  6827.         AX = error code
  6828. Note:    login path is of form "\\machine\username"
  6829. SeeAlso: AX=5F82h,AX=5F84h
  6830. ----------215F82-----------------------------
  6831. INT 21 - LANtastic - LOGOUT FROM SERVER
  6832.     AX = 5F82h
  6833.     ES:DI -> ASCIZ server name (in form "\\machine")
  6834. Return: CF clear if successful
  6835.     CF set on error
  6836.         AX = error code
  6837. SeeAlso: AX=5F81h
  6838. ----------215F83-----------------------------
  6839. INT 21 - LANtastic - GET USERNAME ENTRY
  6840.     AX = 5F83h
  6841.     BX = login entry index (0-based)
  6842.     ES:DI -> 16-byte buffer for username currently logged into
  6843. Return: CF clear if successful
  6844.         DL = adapter number (v3+)
  6845.     CF set on error
  6846.         AX = error code
  6847.     BX = next login entry index (BX-1 is current index)
  6848. ----------215F84-----------------------------
  6849. INT 21 - LANtastic - GET INACTIVE SERVER ENTRY
  6850.     AX = 5F84h
  6851.     BX = server index not currently logged into
  6852.     ES:DI -> 16-byte buffer for server name which is available for logging
  6853.         in to ("\\" prefix omitted)
  6854. Return: CF clear if successful
  6855.         DL = adapter number to non-logged in server is on
  6856.     CF set on error
  6857.         AX = error code
  6858. SeeAlso: AX=5F81h
  6859. ----------215F85-----------------------------
  6860. INT 21 - LANtastic - CHANGE PASSWORD
  6861.     AX = 5F85h
  6862.     ES:DI -> buffer containing "\\machine\oldpassword" 00h "newpassword"00h
  6863. Return: CF clear if successful
  6864.     CF set on error
  6865.         AX = error code
  6866. Note:    must be logged into the named machine
  6867. ----------215F86-----------------------------
  6868. INT 21 - LANtastic - DISABLE ACCOUNT
  6869.     AX = 5F86h
  6870.     ES:DI -> ASCIZ machine name and password in form "\\machine\password"
  6871. Return: CF clear if successful
  6872.     CF set on error
  6873.         AX = error code
  6874. Note:    must be logged into the named machine and concurrent logins set to 1
  6875.       by NET_MGR.  Requires system manager to re-enable account.
  6876. ----------215F87-----------------------------
  6877. INT 21 - LANtastic v3+ - GET ACCOUNT
  6878.     AX = 5F87h
  6879.     DS:SI -> 128-byte buffer for account information (see below)
  6880.     ES:DI -> ASCIZ machine name in form "\\machine"
  6881. Return:    CF clear if successful
  6882.     CF set on error
  6883.         AX = error code
  6884.     BX destroyed
  6885. Note:    must be logged into the specified machine
  6886.  
  6887. Format of user account structure:
  6888. Offset    Size    Description
  6889.  00h 16 BYTEs    blank-padded username
  6890.  10h 16 BYTEs    reserved (00h)
  6891.  20h 32 BYTEs    user description
  6892.  40h    BYTE    privilege bits
  6893.         bit 7: bypass access control lists
  6894.             6: bypass queue protection
  6895.             5: treat as local process
  6896.             4: bypass mail protection
  6897.             3: allow audit entry creation
  6898.             2: system manager
  6899.  41h    BYTE    maximum concurrent users
  6900.  42h 42 BYTEs    bit map for disallowed half hours, beginning on Sunday
  6901.         (bit set if half-hour not an allowed time)
  6902.  6Ch    WORD    internal (0002h)
  6903.  6Eh  2 WORDs    last login time
  6904.  72h  2 WORDs    account expiration date (MSDOS-format year/month:day)
  6905.  76h  2 WORDs    password expiration date (0 = none)
  6906.  7Ah    BYTE    number of days to extend password after change (1-31)
  6907.  7Bh  5 BYTEs    reserved
  6908. ----------215F97-----------------------------
  6909. INT 21 - LANtastic - COPY FILE
  6910.     AX = 5F97h
  6911.     CX:DX = number of bytes to copy (FFFFFFFFh = entire file)
  6912.     SI = source file handle
  6913.     DI = destination file handle
  6914. Return: CF clear if successful
  6915.         AX:DX = number of bytes copied
  6916.     CF set on error
  6917.         AX = error code
  6918. Note:    copy is performed by server
  6919. ----------215F98-----------------------------
  6920. INT 21 - LANtastic - SEND UNSOLICITED MESSAGE
  6921.     AX = 5F98h
  6922.     DS:SI -> message buffer (see below)
  6923. Return: CF clear if successful
  6924.     CF set on error
  6925.         AX = error code
  6926. SeeAlso: AX=5F99h
  6927.  
  6928. Format of message buffer:
  6929. Offset    Size    Description
  6930.  00h    BYTE    reserved
  6931.  01h    BYTE    message type
  6932.         00h general 
  6933.         01h server warning
  6934.         02h-7Fh reserved
  6935.         80h-FFh user-defined
  6936.  02h 16 BYTEs    ASCIZ destination machine name
  6937.  12h 16 BYTEs    ASCIZ server name which user must be logged into
  6938.  22h 16 BYTEs    ASCIZ user name
  6939.  32h 16 BYTEs    ASCIZ originating machine name (filled in when received)
  6940.  42h 80 BYTEs    message text
  6941. ----------215F99-----------------------------
  6942. INT 21 - LANtastic - GET LAST RECEIVED UNSOLICITED MESSAGE
  6943.     AX = 5F99h
  6944.     ES:DI -> messsage buffer (see AX=5F98h for format)
  6945. Return: CF clear if successful
  6946.     CF set on error
  6947.         AX = error code
  6948. SeeAlso: AX=5F98h
  6949. ----------215F9A-----------------------------
  6950. INT 21 - LANtastic - GET MESSAGE PROCESSING FLAGS
  6951.     AX = 5F9Ah
  6952. Return: CF clear if successful
  6953.         DL = bits describing processing for received unsolicited messages
  6954.         bit 0: beep before message is delivered
  6955.             1: deliver message to message service
  6956.             2: pop up message automatically (v3+)
  6957.     CF set on error
  6958.         AX = error code
  6959. SeeAlso: AX=5F9Bh,AX=5F9Ch
  6960. ----------215F9B-----------------------------
  6961. INT 21 - LANtastic - SET MESSAGE PROCESSING FLAG
  6962.     AX = 5F9Bh
  6963.     DL = bits describing processing for received unsolicited messages
  6964.          (see AX=5F9Ah)
  6965. Return: CF clear if successful
  6966.     CF set on error
  6967.         AX = error code
  6968. SeeAlso: AX=5F9Ah
  6969. ----------215F9C-----------------------------
  6970. INT 21 - LANtastic v3+ - POP UP LAST RECEIVED MESSAGE
  6971.     AX = 5F9Ch
  6972.     CX = time to leave on screen in clock ticks
  6973.     DH = 0-based screen line on which to place message
  6974. Return:    CF clear if successful
  6975.     CF set on error
  6976.         AX = error code (0Bh)
  6977. Note:    the original screen contents are restored when the message is removed
  6978. SeeAlso: AX=5F9Ah
  6979. ----------215FA0-----------------------------
  6980. INT 21 - LANtastic - GET QUEUE ENTRY
  6981.     AX = 5FA0h
  6982.     BX = queue entry index (0000h is first entry)
  6983.     DS:SI -> buffer for queue entry (see below)
  6984.     ES:DI -> ASCIZ server name in form "\\name"
  6985. Return: CF clear if successful
  6986.     CF set on error
  6987.         AX = error code
  6988.     BX = entry index for next queue entry (BX-1 is current index)
  6989. SeeAlso: AX=5FA1h,AX=5FA2h
  6990.  
  6991. Format of queue entry:
  6992. Offset    Size    Description
  6993.  00h    BYTE    status of entry
  6994.         00h empty
  6995.         01h being updated
  6996.         02h being held
  6997.         03h waiting for despool
  6998.         04h being despooled
  6999.         05h canceled
  7000.         06h spooled file could not be accessed
  7001.         07h destination could not be accessed
  7002.         08h rush job
  7003.  01h    DWORD    size of spooled file
  7004.  05h    BYTE    type of entry
  7005.         00h printer queue file
  7006.         01h message
  7007.         02h local file
  7008.         03h remote file
  7009.         04h to remote modem
  7010.         05h batch processor file
  7011.  06h    BYTE    output control
  7012.         bit 6: don't delete (for mail)
  7013.         bit 5: mail file contains voice mail (v3+)
  7014.  07h    WORD    number of copies
  7015.  09h    DWORD    sequence number of queue entry
  7016.  0Dh 48 BYTEs    pathname of spooled file
  7017.  3Dh 16 BYTEs    user who spooled file
  7018.  4Dh 16 BYTEs    name of machine from which file was spooled
  7019.  5Dh    WORD    date file was spooled (see AX=5700h)
  7020.  5Fh    WORD    time file was spooled (see AX=5700h)
  7021.  61h 17 BYTEs    ASCIZ destination device or user name
  7022.  72h 48 BYTEs    comment field
  7023. ----------215FA1-----------------------------
  7024. INT 21 - LANtastic - SET QUEUE ENTRY
  7025.     AX = 5FA1h
  7026.     BX = handle of opened queue entry
  7027.     DS:SI -> queue entry (see AX=5FA0h)
  7028. Return: CF clear if successful
  7029.     CF set on error
  7030.         AX = error code
  7031. Note:    the only queue entry fields which may be changed are output control,
  7032.       number of copies, destination device, and comment
  7033. SeeAlso: AX=5FA0h,AX=5FA2h
  7034. ----------215FA2-----------------------------
  7035. INT 21 - LANtastic - CONTROL QUEUE
  7036.     AX = 5FA2h
  7037.     BL = control command
  7038.         00h start despooling (privileged)
  7039.         01h halt despooling (privileged)
  7040.         02h halt despooling at end of job (privileged)
  7041.         03h pause despooler at end of job (privileged)
  7042.         04h print single job (privileged)
  7043.         05h restart current job (privileged)
  7044.         06h cancel the current job
  7045.         07h hold queue entry
  7046.         08h release a held queue entry
  7047.         09h make queue entry a rushed job (privileged)
  7048.     CX:DX = sequence number to control (commands 06h-09h)
  7049.     DX = physical printer number (commands 00h-05h)
  7050.         00h-02h LPT1-LPT3
  7051.         03h,04h COM1,COM2
  7052.         other    all printers
  7053.     ES:DI -> ASCIZ computer name
  7054. Return: CF clear if successful
  7055.     CF set on error
  7056.         AX = error code
  7057. ----------215FA3-----------------------------
  7058. INT 21 - LANtastic v3+ - GET PRINTER STATUS
  7059.     AX = 5FA3h
  7060.     BX = physical printer number (00h-02h = LPT1-LPT3, 03h-04h = COM1-COM2)
  7061.     DS:SI -> buffer for printer status (see below)
  7062.     ES:DI -> ASCIZ server name in form "\\machine"
  7063. Return: CF clear if successful
  7064.     CF set on error
  7065.         AX = error code
  7066.     BX = next physical printer number
  7067.  
  7068. Format of printer status:
  7069. Offset    Size    Description
  7070.  00h    BYTE    printer state
  7071.         bit 7: printer paused
  7072.         bits 0-6: 0 printer disabled
  7073.               1 will stop at end of job
  7074.               2 print multiple jobs
  7075.  01h    WORD    queue index of print job being despooled
  7076.         FFFFh if not despooling--ignore all following fields
  7077.  03h    WORD    actual characters per second being output
  7078.  05h    DWORD    number of characters actually output so far
  7079.  09h    DWORD    number of bytes read from spooled file so far
  7080.  0Dh    WORD    copies remaining to print
  7081. ----------215FA4-----------------------------
  7082. INT 21 - LANtastic v3+ - GET STREAM INFO
  7083.     AX = 5FA4h
  7084.     BX = 0-based stream index number
  7085.     DS:SI -> buffer for stream information (see below)
  7086.     ES:DI -> ASCIZ machine name in form "\\machine"
  7087. Return: CF clear if successful
  7088.     CF set on error
  7089.         AX = error code
  7090.     BX = next stream number
  7091. SeeAlso: AX=5FA5h
  7092.  
  7093. Format of stream information:
  7094. Offset    Size    Description
  7095.  00h    BYTE    queueing of jobs for logical printer (0=disabled,other=enabled)
  7096.  01h 11 BYTEs    logical printer resource template (may contain ? wildcards)
  7097. ----------215FA5-----------------------------
  7098. INT 21 - LANtastic v3+ - SET STREAM INFO
  7099.     AX = 5FA5h
  7100.     BX = 0-based stream index number
  7101.     DS:SI -> buffer containing stream information (see AX=5FA4h)
  7102.     ES:DI -> ASCIZ machine name in form "\\machine"
  7103. Return: CF clear if successful
  7104.     CF set on error
  7105.         AX = error code
  7106. SeeAlso: AX=5FA4h
  7107. ----------215FA7-----------------------------
  7108. INT 21 - LANtastic - CREATE USER AUDIT ENTRY
  7109.     AX = 5FA7h
  7110.     DS:DX -> ASCIZ reason code (max 8 bytes)
  7111.     DS:SI -> ASCIZ variable reason code (max 128 bytes)
  7112.     ES:DI -> ASCIZ machine name in form "\\machine"
  7113. Return: CF clear if successful
  7114.     CF set on error
  7115.         AX = error code
  7116. ----------215FB0-----------------------------
  7117. INT 21 - LANtastic - GET ACTIVE USER INFORMATION
  7118.     AX = 5FB0h
  7119.     BX = server login entry index
  7120.     DS:SI -> buffer for active user entry (see below)
  7121.     ES:DI -> ASCIZ machine name in form "\\server"
  7122. Return: CF clear if successful
  7123.     CF set on error
  7124.         AX = error code
  7125.     BX = next login index
  7126.  
  7127. Format of active user entry:
  7128. Offset    Size    Description
  7129.  00h    WORD    virtual circuit number
  7130.  02h    BYTE    login state
  7131.         bit 0: fully logged in
  7132.             1: remote program load login
  7133.             3: user can create audit entries
  7134.             4: bypass mail protection
  7135.             5: treat as local process
  7136.             6: bypass queue protection
  7137.             7: bypass access control lists
  7138.  03h    BYTE    last command issued (see below)
  7139.  04h  5 BYTEs    number of I/O bytes (40-bit unsigned number)
  7140.  09h  3 BYTEs    number of server requests (24-bit unsigned)
  7141.  0Ch 16 BYTEs    name of user who is logged in
  7142.  1Ch 16 BYTEs    name of remote logged in machine
  7143.  
  7144. Values for last command:
  7145.  00h    login
  7146.  01h    process termination
  7147.  02h    open file
  7148.  03h    close file
  7149.  04h    create file
  7150.  05h    create new file
  7151.  06h    create unique file
  7152.  07h    commit data to disk
  7153.  08h    read file
  7154.  09h    write file
  7155.  0Ah    delete file
  7156.  0Bh    set file attributes
  7157.  0Ch    lock byte range
  7158.  0Dh    unlock byte range
  7159.  0Eh    create subdirectory
  7160.  0Fh    remove subdirectory
  7161.  10h    rename file
  7162.  11h    find first matching file
  7163.  12h    find next matching file
  7164.  13h    get disk free space
  7165.  14h    get a queue entry
  7166.  15h    set a queue entry
  7167.  16h    control the queue
  7168.  17h    return login information
  7169.  18h    return link description
  7170.  19h    seek on file
  7171.  1Ah    get server's time
  7172.  1Bh    create audit entry
  7173.  1Ch    open file in multitude of modes
  7174.  1Dh    change password
  7175.  1Eh    disable account
  7176.  1Fh    local server file copy
  7177. ---v3+---
  7178.  20h    get username from account file
  7179.  21h    translate server's logical path
  7180.  22h    make indirect file
  7181.  23h    get indirect file contents
  7182.  24h    get physical printer status
  7183.  25h    get logical print stream info
  7184.  26h    set logical print stream info
  7185.  27h    get user's account record
  7186. ----------215FB1-----------------------------
  7187. INT 21 - LANtastic - GET SHARED DIRECTORY INFORMATION
  7188.     AX = 5FB1h
  7189.     DS:SI -> 64-byte buffer for link description
  7190.     ES:DI -> ASCIZ machine and shared directory name in form
  7191.          "\\machine\shared-resource"
  7192. Return: CF clear if successful
  7193.         CX = access control list privilege bits for requesting user
  7194.         bit 5: allow attribute changing
  7195.             6: allow physical access to device
  7196.             7: allow program execution
  7197.             8: allow file renaming
  7198.             9: allow directory deletion
  7199.            10: allow file deletion
  7200.            11: allow file/directory lookups
  7201.            12: allow directory creation
  7202.            13: allow file creation
  7203.            14: allow open for write and writing
  7204.            15: allow open for read and reading
  7205.     CF set on error
  7206.         AX = error code
  7207. ----------215FB2-----------------------------
  7208. INT 21 - LANtastic v3+ - GET USERNAME FROM ACCOUNT FILE
  7209.     AX = 5FB2h
  7210.     BX = username entry index (0 for first)
  7211.     DS:SI -> 16-byte buffer for username
  7212.     ES:DI -> ASCIZ server name in form "\\machine"
  7213. Return: CF clear if successful
  7214.     CF set on error
  7215.         AX = error code
  7216.     BX = next queue entry index
  7217. ----------215FB3-----------------------------
  7218. INT 21 - LANtastic v3+ - TRANSLATE PATH
  7219.     AX = 5FB3h
  7220.     DS:SI -> 128-byte buffer for ASCIZ result
  7221.     ES:DI -> full ASCIZ path, including server name
  7222.     DX = types of translation to be performed
  7223.         bit 0: expand last component as indirect file
  7224.         1: return actual path relative to server's physical disk
  7225. Return: CF clear if successful
  7226.     CF set on error
  7227.         AX = error code
  7228. Note:    always expands any indirect files along the path
  7229. SeeALso: AX=5FB4h
  7230. ----------215FB4-----------------------------
  7231. INT 21 - LANtastic v3+ - CREATE INDIRECT FILE
  7232.     AX = 5FB4h
  7233.     DS:SI -> 128-byte buffer containing ASCIZ contents of indirect file
  7234.     ES:DI -> full ASCIZ path of indirect file to create, incl machine name
  7235. Return: CF clear if successful
  7236.     CF set on error
  7237.         AX = error code
  7238. Note:    the contents of the indirect file may be any valid server-relative path
  7239. ----------215FB5-----------------------------
  7240. INT 21 - LANtastic v3+ - GET INDIRECT FILE CONTENTS
  7241.     AX = 5FB5h
  7242.     DS:SI -> 128-byte buffer for ASCIZ indirect file contents
  7243.     ES:DI -> full ASCIZ path of indirect file
  7244. Return: CF clear if successful
  7245.     CF set on error
  7246.         AX = error code
  7247. ----------215FC0-----------------------------
  7248. INT 21 - LANtastic - GET TIME FROM SERVER
  7249.     AX = 5FC0h
  7250.     DS:SI -> time block (see below)
  7251.     ES:DI -> ASCIZ server name to get time from
  7252. Return: CF clear if successful
  7253.     CF set on error
  7254.         AX = error code
  7255.  
  7256. Format of time block:
  7257. Offset    Size    Description
  7258.  00h    WORD    year
  7259.  02h    BYTE    day
  7260.  03h    BYTE    month
  7261.  04h    BYTE    minutes
  7262.  05h    BYTE    hour
  7263.  06h    BYTE    hundredths of second
  7264.  07h    BYTE    second
  7265. ----------215FD0-----------------------------
  7266. INT 21 - LANtastic - GET REDIRECTED PRINTER TIMEOUT
  7267.     AX = 5FD0h
  7268. Return: CF clear if successful
  7269.         CX = redirected printer timeout in clock ticks of 55ms
  7270.         0000h if timeout disabled
  7271.     CF set on error
  7272.         AX = error code
  7273. SeeAlso: AX=5FD1h
  7274. ----------215FD1-----------------------------
  7275. INT 21 - LANtastic - SET REDIRECTED PRINTER TIMEOUT
  7276.     AX = 5FD1h
  7277.     CX = printer timeout in clock ticks of 55ms, 0000h to disable timeouts
  7278. Return: CF clear if successful
  7279.     CF set on error
  7280.         AX = error code
  7281. SeeAlso: AX=5FD0h
  7282. ----------215FE0-----------------------------
  7283. INT 21 - LANtastic - GET DOS SERVICE VECTOR
  7284.     AX = 5FE0h
  7285. Return: CF clear if successful
  7286.         ES:BX -> current FAR service routine
  7287.     CF set on error
  7288.         AX = error code
  7289. SeeAlso: AX=5FE1h
  7290. ----------215FE1-----------------------------
  7291. INT 21 - LANtastic - SET DOS SERVICE VECTOR
  7292.     AX = 5FE1h
  7293.     ES:BX -> FAR routine to call for DOS service
  7294. Return: CF clear if successful
  7295.     CF set on error
  7296.         AX = error code
  7297. Note:    new handler must chain to previous handler as its first action
  7298. SeeAlso: AX=5FE0h
  7299. ----------215FE2-----------------------------
  7300. INT 21 - LANtastic - GET MESSAGE SERVICE VECTOR
  7301.     AX = 5FE2h
  7302. Return: CF clear if successful
  7303.         ES:BX -> current FAR message service routine
  7304.     CF set on error
  7305.         AX = error code
  7306. SeeAlso: AX=5FE3h
  7307. ----------215FE3-----------------------------
  7308. INT 21 - LANtastic - SET MESSAGE SERVICE VECTOR
  7309.     AX = 5FE3h
  7310.     ES:BX -> FAR routine for processing network messages
  7311. Return: CF clear if successful
  7312.     CF set on error
  7313.         AX = error code
  7314. Notes:    handler must chain to previous handler as its first action
  7315.     on invocation, ES:BX -> just-received message
  7316. SeeAlso: AX=5FE2h
  7317. ----------2160-------------------------------
  7318. INT 21 - DOS 3.0+ - CANONICALIZE FILENAME OR PATH
  7319.     AH = 60h
  7320.     DS:SI -> ASCIZ filename or path
  7321.     ES:DI -> 128-byte buffer for canonicalized name
  7322. Return: CF set on error
  7323.         AX = error code
  7324.         02h invalid component in directory path or drive letter only
  7325.         03h malformed path or invalid drive letter
  7326.         ES:DI buffer unchanged
  7327.     CF clear if successful
  7328.         AH = 00h
  7329.         AL = destroyed (00h or 5Ch or last char of current dir on drive)
  7330.         buffer filled with qualified name of form D:\PATH\FILE.EXT or
  7331.           \\MACHINE\PATH\FILE.EXT
  7332. Notes:    the input path need not actually exist
  7333.     letters are uppercased, forward slashes converted to backslashes,
  7334.       asterisks converted to appropriate number of question marks, and
  7335.       file and directory names are truncated to 8.3 if necessary.
  7336.     '.' and '..' in the path are resolved
  7337.     filespecs on local drives always start with "d:", those on network
  7338.       drives always start with "\\"
  7339.     if path string is on a JOINed drive, the returned name is the one that
  7340.       would be needed if the drive were not JOINed; similarly for a
  7341.       SUBSTed, ASSIGNed, or network drive letter.    Because of this, it is
  7342.       possible to get a qualified name that is not legal under the current
  7343.       combination of SUBSTs, ASSIGNs, JOINs, and network redirections
  7344.     under DOS 3.3 through 5.00, a device name is translated differently if
  7345.       the device name does not have an explicit directory or the directory
  7346.       is \DEV (relative directory DEV from the root directory works
  7347.       correctly).  In these cases, the returned string consists of the
  7348.       unchanged device name and extension appended to the string X:/
  7349.       (forward slash instead of backward slash as in all other cases) where
  7350.       X is the default or explicit drive letter.
  7351.     functions which take pathnames require canonical paths if invoked via
  7352.       INT 21/AX=5D00h
  7353.     supported by OS/2 v1.1 compatibility box
  7354.     NetWare 2.1x does not support characters with the high bit set; early
  7355.       versions of NetWare 386 support such characters except in this call.
  7356.       In addition, NetWare returns error code 3 for the path "X:\"; one
  7357.       should use "X:\." instead.
  7358.     for DOS 3.3-5.0, the input and output buffers may be the same, as the
  7359.       canonicalized name is built in an internal buffer and copied to the
  7360.       specified output buffer as the very last step
  7361. SeeAlso: INT 2F/AX=1123h,INT 2F/AX=1221h
  7362. ----------2161-------------------------------
  7363. INT 21 - DOS 3+ - UNUSED
  7364.     AH = 61h
  7365. Return: AL = 00h
  7366. Note:    this function does nothing and returns immediately
  7367. ----------2162-------------------------------
  7368. INT 21 - DOS 3+ - GET CURRENT PSP ADDRESS
  7369.     AH = 62h
  7370. Return: BX = segment of PSP for current process
  7371. Notes:    under DOS 3+, this function does not use any of the DOS-internal stacks
  7372.       and is thus fully reentrant
  7373.     the current PSP is not necessarily the caller's PSP
  7374.     identical to the undocumented AH=51h
  7375. SeeAlso: AH=50h,AH=51h
  7376. ----------216300-----------------------------
  7377. INT 21 - DOS 2.25 only - GET LEAD BYTE TABLE ADDRESS
  7378.     AX = 6300h
  7379. Return: CF clear if successful
  7380.         DS:SI -> lead byte table (see below for format)
  7381.     CF set on error
  7382.         AX = error code (01h) (see AH=59h)
  7383. Notes:    does not preserve any registers other than SS:SP
  7384.     the US version of MSDOS 3.30 treats this as an unused function,
  7385.       setting AL=00h and returning immediately
  7386. SeeAlso: AX=6301h,AH=07h,AH=08h,AH=0Bh
  7387.  
  7388. Format of lead byte table entry:
  7389. Offset    Size    Description
  7390.  00h  2 BYTEs    low/high ends of a range of leading byte of double-byte chars
  7391.  02h  2 BYTEs    low/high ends of a range of leading byte of double-byte chars
  7392.     ...
  7393.   N   2 BYTEs    00h,00h end flag
  7394. ----------216300-----------------------------
  7395. INT 21 - Asian DOS 3.2+ - GET DOUBLE BYTE CHARACTER SET LEAD TABLE
  7396.     AX = 6300h
  7397. Return: AL = error code
  7398.         00h successful
  7399.         DS:SI -> DBCS table (see below)
  7400.         all other registers except CS:IP and SS:SP destroyed
  7401.         FFh not supported
  7402. Notes:    probably identical to AH=63h/AL=00h for DOS 2.25
  7403.     the US version of MSDOS 3.30 treats this as an unused function,
  7404.       setting AL=00h and returning immediately
  7405.     the US version of DOS 4.0+ accepts this function, but returns an empty
  7406.       list
  7407. SeeAlso: AX=6300h"DOS 2.25"
  7408.  
  7409. Format of DBCS table:
  7410. Offset    Size    Description
  7411.  00h  2 BYTEs    low/high ends of a range of leading byte of double-byte chars
  7412.  02h  2 BYTEs    low/high ends of a range of leading byte of double-byte chars
  7413.     ...
  7414.   N   2 BYTEs    00h,00h end flag
  7415. ----------216301-----------------------------
  7416. INT 21 - DOS 2.25, Asian DOS 3.2+ - SET KOREAN (HONGEUL) INPUT MODE
  7417.     AX = 6301h
  7418.     DL = new mode
  7419.         00h return only full characters on DOS keyboard input functions
  7420.         01h    return partially-formed characters also
  7421. Return: AL = status
  7422.         00h successful
  7423.         FFh invalid mode
  7424. SeeAlso: AH=07h,AH=08h,AH=0Bh,AH=63h,AX=6302h
  7425. ----------216302-----------------------------
  7426. INT 21 - DOS 2.25, Asian DOS 3.2+ - GET KOREAN (HONGEUL) INPUT MODE
  7427.     AX = 6302h
  7428. Return: AL = status
  7429.         00h successful
  7430.         DL = current input mode
  7431.             00h return only full characters
  7432.             01h return partial characters
  7433.         FFh not supported
  7434. SeeAlso: AH=07h,AH=08h,AH=0Bh,AH=63h,AX=6301h
  7435. ----------2164-------------------------------
  7436. INT 21 - DOS 3.2+ internal - SET DEVICE DRIVER LOOKAHEAD FLAG
  7437.     AH = 64h
  7438.     AL = flag
  7439.         00h (default) call device driver function 5 (non-dest read)
  7440.             before INT 21/AH=01h,08h,0Ah
  7441.         nonzero don't call driver function 5
  7442. Return: nothing
  7443. Notes:    called by DOS 3.3+ PRINT.COM
  7444.     does not use any of the DOS-internal stacks and is thus fully
  7445.       reentrant
  7446. SeeAlso: AH=01h,AH=08h,AH=0Ah,AX=5D06h
  7447. ----------2165-------------------------------
  7448. INT 21 - DOS 3.3+ - GET EXTENDED COUNTRY INFORMATION
  7449.     AH = 65h
  7450.     AL = info ID
  7451.         01h get general internationalization info
  7452.         02h get pointer to uppercase table
  7453.         04h get pointer to filename uppercase table
  7454.         05h get pointer to filename terminator table
  7455.         06h get pointer to collating sequence table
  7456.         07h (DOS 4+) get pointer to Double-Byte Character Set table
  7457.     BX = code page (-1=global code page)
  7458.     DX = country ID (-1=current country)
  7459.     ES:DI -> country information buffer (see below)
  7460.     CX = size of buffer (>= 5)
  7461. Return: CF set on error
  7462.         AX = error code (see AH=59h)
  7463.     CF clear if succesful
  7464.         CX = size of country information returned
  7465.         ES:DI -> country information
  7466. Notes:    AL=05h appears to return same info for all countries and codepages; it
  7467.       has been documented for DOS 5.0, but was undocumented in ealier
  7468.       versions
  7469.     NLSFUNC must be installed to get info for countries other than the
  7470.       default
  7471.     subfunctions 02h and 04h are identical under OS/2
  7472. SeeAlso: AH=38h,INT 2F/AX=1401h,INT 2F/AX=1402h
  7473.  
  7474. Format of country information:
  7475. Offset    Size    Description
  7476.  00h    BYTE    info ID
  7477. ---if info ID = 01h---
  7478.  01h    WORD    size
  7479.  03h    WORD    country ID
  7480.  05h    WORD    code page
  7481.  07h 34 BYTEs    country-dependent info (see AH=38h)
  7482. ---if info ID = 02h---
  7483.  01h    DWORD    pointer to uppercase table (see below)
  7484. ---if info ID = 04h---
  7485.  01h    DWORD    pointer to filename uppercase table (see below)
  7486. ---if info ID = 05h---
  7487.  01h    DWORD    pointer to filename character table (see below)
  7488. ---if info ID = 06h---
  7489.  01h    DWORD    pointer to collating table (see below)
  7490. ---if info ID = 07h (DOS 4+)---
  7491.  01h    DWORD    pointer to DBCS lead byte table (see below)
  7492.  
  7493. Format of uppercase table:
  7494. Offset    Size    Description
  7495.  00h    WORD    table size
  7496.  02h 128 BYTEs    uppercase equivalents (if any) of chars 80h to FFh
  7497.  
  7498. Format of collating table:
  7499. Offset    Size    Description
  7500.  00h    WORD    table size
  7501.  02h 256 BYTEs    values used to sort characters 00h to FFh
  7502.  
  7503. Format of filename terminator table:
  7504. Offset    Size    Description
  7505.  00h    WORD    table size (not counting this word)
  7506.  02h    BYTE    ??? (01h for MSDOS 3.30-5.00)
  7507.  03h    BYTE    lowest permissible character value for filename
  7508.  04h    BYTE    highest permissible character value for filename
  7509.  05h    BYTE    ??? (00h for MSDOS 3.30-5.00)
  7510.  06h    BYTE    first excluded character in range \ all characters in this
  7511.  07h    BYTE    last excluded character in range  / range are illegal
  7512.  08h    BYTE    ??? (02h for MSDOS 3.30-5.00)
  7513.  09h    BYTE    number of illegal (terminator) characters
  7514.  0Ah  N BYTES    characters which terminate a filename:    ."/\[]:|<>+=;,
  7515. Note:    partially documented for DOS 5.0, but undocumented for earlier versions
  7516.  
  7517. Format of filename uppercase table:
  7518. Offset    Size    Description
  7519.  00h    WORD    table size
  7520.  02h 128 BYTEs    uppercase equivalents (if any) of chars 80h to FFh
  7521.  
  7522. Format of DBCS lead byte table:
  7523. Offset    Size    Description
  7524.  00h    WORD    length
  7525.  02h 2N BYTEs    start/end for N lead byte ranges
  7526.     WORD    0000h    (end of table)
  7527. ----------2165-------------------------------
  7528. INT 21 - DOS 4+ - COUNTRY-DEPENDENT CHARACTER CAPITALIZATION
  7529.     AH = 65h
  7530.     AL = function
  7531.         20h capitalize character
  7532.         DL = character to capitalize
  7533.         Return: DL = capitalized character
  7534.         21h capitalize string
  7535.         DS:DX -> string to capitalize
  7536.         CX = length of string
  7537.         22h capitalize ASCIZ string
  7538.         DS:DX -> ASCIZ string to capitalize
  7539. Return: CF set on error
  7540.         AX = error code (see AH=59h)
  7541.     CF clear if successful
  7542. Note:    these calls have been documented for DOS 5+, but were undocumented in
  7543.       DOS 4.x.
  7544. ----------216523-----------------------------
  7545. INT 21 - DOS 4+ internal - DETERMINE IF CHARACTER REPRESENTS YES/NO RESPONSE
  7546.     AX = 6523h
  7547.     DL = character
  7548.     DH = second character of double-byte character (if applicable)
  7549. Return: CF set on error
  7550.     CF clear if successful
  7551.         AX = type
  7552.         00h no
  7553.         01h yes
  7554.         02h neither yes nor no
  7555. ----------2165-------------------------------
  7556. INT 21 - DOS 4+ internal - COUNTRY-DEPENDENT FILENAME CAPITALIZATION
  7557.     AH = 65h
  7558.     AL = function
  7559.         A0h capitalize filename character
  7560.         DL = character to capitalize
  7561.         Return: DL = capitalized character
  7562.         A1h capitalize counted filename string
  7563.         DS:DX -> filename string to capitalize
  7564.         CX = length of string
  7565.         A2h capitalize ASCIZ filename
  7566.         DS:DX -> ASCIZ filename to capitalize
  7567. Return: CF set on error
  7568.         AX = error code (see AH=59h)
  7569.     CF clear if successful
  7570. Note:    nonfunctional in DOS 4.00 through 5.00 due to a bug (the code sets a
  7571.       pointer depending on the high bit of AL, but doesn't clear the
  7572.       bit before branching by function number).
  7573. ----------216601-----------------------------
  7574. INT 21 - DOS 3.3+ - GET GLOBAL CODE PAGE TABLE
  7575.     AX = 6601h
  7576. Return: CF set on error
  7577.         AX = error code (see AH=59h)
  7578.     CF clear if successful
  7579.         BX = active code page (see AX=6602h)
  7580.         DX = system code page
  7581. SeeAlso: AX=6602h
  7582. ----------216602-----------------------------
  7583. INT 21 - DOS 3.3+ - SET GLOBAL CODE PAGE TABLE
  7584.     AX = 6602h
  7585.     BX = active code page
  7586.         437 US
  7587.         850 Multilingual
  7588.         852 Slavic/Latin II (DOS 5+)
  7589.         857 Turkish
  7590.         860 Portugal
  7591.         861    Iceland
  7592.         863 Canada (French)
  7593.         865 Norway/Denmark
  7594.     DX = system code page (active page at boot time)
  7595. Return: CF set on error
  7596.         AX = error code (see AH=59h)
  7597.     CF clear if successful
  7598. SeeAlso: AX=6601h
  7599. ----------2167-------------------------------
  7600. INT 21 - DOS 3.3+ - SET HANDLE COUNT
  7601.     AH = 67h
  7602.     BX = size of new file handle table for process
  7603. Return: CF clear if successful
  7604.     CF set on error
  7605.         AX = error code (see AH=59h)
  7606. Notes:    if BX <= 20, no action is taken if the handle limit has not yet been
  7607.       increased, and the table is copied back into the PSP if the limit
  7608.       is currently > 20 handles
  7609.     for file handle tables of > 20 handles, DOS 3.30 never reuses the
  7610.       same memory block, even if the limit is being reduced; this can lead
  7611.       to memory fragmentation as a new block is allocated and the existing
  7612.       one freed
  7613.     only the first 20 handles are copied to child processes in DOS 3.3
  7614. BUG:    the original release of DOS 3.30 allocates a full 64K for the handle
  7615.       table on requests for an even number of handles
  7616. SeeAlso: AH=26h
  7617. ----------2168-------------------------------
  7618. INT 21 - DOS 3.3+ - "FFLUSH" - COMMIT FILE
  7619.     AH = 68h
  7620.     BX = file handle
  7621. Return: CF clear if successful
  7622.         all data still in DOS disk buffers is written to disk immediately,
  7623.           and the file's directory entry is updated
  7624.     CF set on error
  7625.         AX = error code (see AH=59h)
  7626. SeeAlso: AX=5D01h,INT 2F/AX=1107h
  7627. ----------2169-------------------------------
  7628. INT 21 - DOS 4.0 internal - GET/SET DISK SERIAL NUMBER
  7629.     AH = 69h
  7630.     AL = subfunction
  7631.         00h    get serial number
  7632.         01h set serial number
  7633.     BL = drive (0=default, 1=A, 2=B, etc)
  7634.     DS:DX -> disk info (see below)
  7635. Return: CF set on error
  7636.         AX = error code (see AH=59h)
  7637.     CF clear if successful
  7638.         AX destroyed
  7639.         (AL = 00h) buffer filled with appropriate values from extended BPB
  7640.         (AL = 01h) extended BPB on disk set to values from buffer
  7641. Notes:    does not generate a critical error; all errors are returned in AX
  7642.     error 0005h given if no extended BPB on disk
  7643.     does not work on network drives (error 0001h)
  7644.     buffer after first two bytes is exact copy of bytes 27h thru 3Dh of
  7645.        extended BPB on disk
  7646. SeeAlso: AX=440Dh
  7647.  
  7648. Format of disk info:
  7649. Offset    Size    Description
  7650.  00h    WORD    info level (zero)
  7651.  02h    DWORD    disk serial number (binary)
  7652.  06h 11 BYTEs    volume label or "NO NAME    " if none present
  7653.  11h  8 BYTEs    (AL=00h only) filesystem type--string "FAT12   " or "FAT16   "
  7654. ----------2169-------------------------------
  7655. INT 21 - DR-DOS 5.0 - NULL FUNCTION
  7656.     AH = 69h
  7657. Return: AL = 00h
  7658. SeeAlso: AH=18h
  7659. ----------216969-----------------------------
  7660. INT 21 - VIRUS - "Rape-747" - INSTALLATION CHECK
  7661.     AX = 6969h
  7662. Return: AX = 0666h if resident
  7663. SeeAlso: AX=58CCh,AH=76h"VIRUS"
  7664. ----------216A-------------------------------
  7665. INT 21 - DOS 4+ internal - ???
  7666.     AH = 6Ah
  7667.     ???
  7668. Return: ???
  7669. Note:    may be equivalent to INT 21/AH=48h
  7670. ----------216B-------------------------------
  7671. INT 21 - DOS 4.0 internal - ???
  7672.     AH = 6Bh
  7673.     AL = subfunction
  7674.         00h ???
  7675.         DS:SI -> Current Directory Structure???
  7676.         CL = drive (1=A:)
  7677.         01h ???
  7678.         DS:SI -> ???
  7679.         CL = file handle???
  7680.         02h ???
  7681.         DS:SI -> Current Directory Structure???
  7682.         DI = ???
  7683.         CX = drive (1=A:)
  7684. Return: CF set on error
  7685.         AX = error code (see INT 21/AH=59h)
  7686.     CF clear if successful
  7687. Note:    passed through to INT 2F/AX=112Fh with AX on top of stack
  7688. SeeAlso: AH=6Bh"DOS 5",INT 2F/AX=112Fh
  7689. ----------216B-------------------------------
  7690. INT 21 - DOS 5.0 - NULL FUNCTION
  7691.     AH = 6Bh
  7692. Return: AL = 00h
  7693. Note:    this function does nothing and returns immediately
  7694. SeeAlso: AH=6Bh"DOS 4"
  7695. ----------216C00-----------------------------
  7696. INT 21 - DOS 4+ - EXTENDED OPEN/CREATE
  7697.     AX = 6C00h
  7698.     BL = open mode as in AL for normal open (INT 21h/AH=3Dh)
  7699.         bit 7: inheritance
  7700.         bits 4-6: sharing mode
  7701.         bit 3 reserved
  7702.         bits 0-2: access mode
  7703.     BH = flags
  7704.         bit 6 = auto commit on every write
  7705.         bit 5 = return error rather than doing INT 24h
  7706.     CX = create attribute
  7707.         bits 6-15 reserved
  7708.         bit 5: archive
  7709.         bit 4: reserved
  7710.         bit 3: volume label
  7711.         bit 2: system
  7712.         bit 1: hidden
  7713.         bit 0: readonly
  7714.     DL = action if file exists/does not exists
  7715.         bits 7-4 action if file does not exist
  7716.             0000 fail
  7717.             0001 create
  7718.         bits 3-0 action if file exists
  7719.             0000 fail
  7720.             0001 open
  7721.             0010 replace/open
  7722.     DH = 00h (reserved)
  7723.     DS:SI -> ASCIZ file name
  7724. Return: CF set on error
  7725.        AX = error code (see AH=59h)
  7726.     CF clear if successful
  7727.        AX = file handle
  7728.        CX = 1 file opened
  7729.         2 file created
  7730.         3 file replaced
  7731. Note:    the PC LAN Program only supports DL=01h, DL=10h/sharing=compatibility,
  7732.       and DL=12h
  7733. SeeAlso: AH=3Ch,AH=3Dh
  7734. ----------217070BX6060-----------------------
  7735. INT 21 - PCW Weather Card interface - GET DATA SEGMENT
  7736.     AX = 7070h
  7737.     BX = 6060h
  7738.     CX = 7070h
  7739.     DX = 7070h
  7740.     SX = 7070h
  7741.     DX = 7070h
  7742. Return: AX = segment of data structure
  7743. Notes:    the data structure is at offset 516 from this segment.
  7744.     the update byte is at offset 514 from this segment.  Updates are
  7745.       once per second while this byte is nonzero and it is decremented
  7746.       once per second.  While this byte is 0 updates are once per minute.
  7747. SeeAlso: AX=7070h/BX=7070h
  7748.  
  7749. Format of data structure:
  7750. Offset    Type    Description
  7751.  00h    WORD    hour
  7752.  02h    WORD    minute
  7753.  04h    WORD    second
  7754.  06h    WORD    day
  7755.  08h    WORD    month
  7756.  0Ah    WORD    year
  7757.  0Ch    WORD    ???
  7758.  0Eh    WORD    relative barometric pressure (in 1/100 inches)
  7759.  10h    WORD    ???
  7760.  12h    WORD    ???
  7761.  14h    WORD    temperature 1 (in 1/10 degrees F)
  7762.  16h    WORD    temperature 1 lowest (in 1/10 degrees F)
  7763.  18h    WORD    temperature 1 highest (in 1/10 degrees F)
  7764.  1Ah    WORD    temperature 2 (in 1/10 degrees F)
  7765.  1Ch    WORD    temperature 2 lowest (in 1/10 degrees F)
  7766.  1Eh    WORD    temperature 2 highest (in 1/10 degrees F)
  7767.  20h    WORD    wind speed (in MPH)
  7768.  22h    WORD    average of 60 wind speed samples (in MPH)
  7769.  24h    WORD    highest wind speed (in MPH)
  7770.  26h    WORD    wind chill factor  (in 1/10 degrees F)
  7771.  28h    WORD    lowest wind chill factor (in 1/10 degrees F)
  7772.  2Ah    WORD    ???
  7773.  2Ch    WORD    wind direction (in degrees)
  7774.  2Eh    WORD    accumulated daily rainfall (in 1/10 inches)
  7775.  30h    WORD    accumulated annual rainfall (in 1/10 inches)
  7776. ----------217070BX7070-----------------------
  7777. INT 21 - PCW Weather Card interface - INSTALLATION CHECK
  7778.     AX = 7070h
  7779.     BX = 7070h
  7780.     CX = 7070h
  7781.     DX = 7070h
  7782.     SX = 7070h
  7783.     DX = 7070h
  7784. Return: AX = 0070h
  7785.     BX = 0070h
  7786.     CX = 0070h
  7787.     DX = 0070h
  7788.     SX = 0070h
  7789.     DX = 0070h
  7790. SeeAlso: AX=7070h/BX=6060h,AX=8080h
  7791. ----------2176-------------------------------
  7792. INT 21 - VIRUS - "Klaeren"/"Hate" - INSTALLATION CHECK
  7793.     AH = 76h
  7794. Return: AL = 48h if resident
  7795. SeeAlso: AX=6969h,AX=7700h"VIRUS"
  7796. ----------217761-----------------------------
  7797. INT 21 - WATCH.COM v3.2+ - INSTALLATION CHECK
  7798.     AX = 7761h ('wa')
  7799. Return: AX = 6177h
  7800. Note:    WATCH.COM is part of the "TSR" package by TurboPower Software
  7801. SeeAlso: INT 16/AX=7761h
  7802. ----------217700-----------------------------
  7803. INT 21 - VIRUS - "Growing Block" - INSTALLATION CHECK
  7804.     AX = 7700h
  7805. Return: AX = 0920h if resident
  7806. SeeAlso: AH=76h,AH=7Fh
  7807. ----------217F-------------------------------
  7808. INT 21 - VIRUS - "Squeaker" - INSTALLATION CHECK
  7809.     AH = 7Fh
  7810. Return: AH = 80h if resident
  7811. SeeAlso: AX=7700h,AH=83h"VIRUS"
  7812. ---------------------------------------------
  7813.